在辅助GUI线程中混淆Dispatcher,TaskScheduler,SynchronizationContext

时间:2014-09-26 23:24:42

标签: wpf dispatcher synchronizationcontext

由于另一个帖子(参见: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之间的连接吗?

谢谢,

戴夫

0 个答案:

没有答案