private static TestMainThreadService Create() { TestMainThreadService mainThreadService = new TestMainThreadService(); var initialized = new ManualResetEventSlim(); AppDomain.CurrentDomain.DomainUnload += mainThreadService.Destroy; AppDomain.CurrentDomain.ProcessExit += mainThreadService.Destroy; // We want to maintain an application on a single STA thread // set Background so that it won't block process exit. var thread = new Thread(mainThreadService.RunMainThread) { Name = "WPF Dispatcher Thread" }; thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(initialized); initialized.Wait(); Dispatcher.FromThread(thread).Invoke(() => { mainThreadService.Thread = thread; mainThreadService.SyncContext = SynchronizationContext.Current; }); return(mainThreadService); }
internal TestMainThread(TestMainThreadService service, Action onDispose) { _service = service; _onDispose = onDispose; }
public BlockingLoopSynchronizationContext(TestMainThreadService service, TestMainThread mainThread, SynchronizationContext innerSynchronizationContext) { _service = service; _mainThread = mainThread; _innerSynchronizationContext = innerSynchronizationContext; }