2

由于另一个帖子(请参阅:使用来自其他线程的 WPF Extended Toolkit MessageBox 和奇怪的行为),我对 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. UI TaskScheduler 真的只有 1 个吗?2. 只有 1 个 UI Dispatcher?3. 有人可以解释(或提供链接) Dispatcher、TaskScheduler 和 SynchronizationContext 之间的联系吗?

谢谢,

戴夫

4

0 回答 0