ViewModel Create(string tempDir, bool bUseTraceDirStopVariable = false) { TraceMessages = new ConcurrentQueue <string>(); if (CurrentApp == null) { CurrentApp = new App(); } MessageDisplayMock display = new MessageDisplayMock(); display.OnMessage += (str1, str2) => { TraceMessages.Enqueue($"{MessageBoxStringPrefix}: {str1} Caption: {str2}"); }; ETWController.ViewModel model = new ETWController.ViewModel(display); model.LocalTraceSettings.PropertyChanged += (object sender, System.ComponentModel.PropertyChangedEventArgs e) => { if (e.PropertyName == nameof(model.LocalTraceSettings.TraceStates)) { lock (LocalTraceStateChanges) { LocalTraceStateChanges.Add(model.LocalTraceSettings.TraceStates); } } }; model.InitUIDependantVariables(CurrentApp, TaskScheduler.Default); model.CaptureKeyboard = false; model.CaptureMouseButtonDown = false; model.CaptureScreenShots = false; model.UnexpandedTraceFileName = Path.Combine(tempDir, "test.etl"); model.LocalTraceSettings.TraceStart = ":: echo hi trace start"; model.LocalTraceSettings.TraceStop = ":: echo trace stop performed " + (bUseTraceDirStopVariable ? ETWController.UI.TraceControlViewModel.TraceFileDirVariable : ETWController.UI.TraceControlViewModel.TraceFileNameVariable); model.LocalTraceSettings.CommandOutputs.CollectionChanged += (sender, e) => { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { TraceMessages.Enqueue(e.NewItems[0].ToString()); } }; return(model); }