由于另一个帖子(参见:Using WPF Extended Toolkit MessageBox from other threads and curious behavior),我对在WPF中辅助GUI(自己的线程中的GUI)中Dispatcher,TaskScheduler,SynchronizationContext的角色和使用感到困惑。我可以在不同的线程上创建另一个GUI窗口。有关如何/为何要执行此操作的讨论,请参阅我引用的stackoverflow帖子或http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in-a-separate-thread-part-1/。但是,我只是使用MainWindow调度程序,SynchronizationContext和TaskScheduler。具体来说,在我用于新GUI的threadproc中,我只有:
public void AltWinThreadProc()
{
// Create our context, and install it:
SynchronizationContext.SetSynchronizationContext(
new DispatcherSynchronizationContext(
Dispatcher.CurrentDispatcher));
_altWindow = new AltThreadWindow(_ui); // _ui = TaskScheduler.FromCurrentSynchronizationContext();
//_altWindow = new AltThreadWindow();
_altWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
当我尝试在第二个线程的新GUI中创建TaskScheduler时,事情不起作用 单独的线程上的GUI不应该有自己的Dispatcher和TaskScheduler吗?
我搜索了这个信息,但无济于事。我不能说我的做法有问题。一切都很好。但我想了解发生了什么。特别: 1.真的只有1个UI TaskScheduler吗? 2.只有1个UI Dispatcher? 3.有人可以解释(或提供链接)Dispatcher,TaskScheduler和SynchronizationContext之间的连接吗?
谢谢,
戴夫