线程上的WPF ShowDialog:需要停止调度程序吗?

时间:2015-12-02 08:05:25

标签: c# wpf dispatcher

我有一个控制台应用程序,它在一个类似于这个例子的单独线程上打开一个模态WPF窗口:

http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in-a-separate-thread-part-1/

// Create a thread
Thread newWindowThread = new Thread(new ThreadStart( () =>
{
    // Create and show the Window
    Window1 tempWindow = new Window1();
    tempWindow.Show();
    // Start the Dispatcher Processing
    System.Windows.Threading.Dispatcher.Run();
}));

但我使用ShowDialog而不是Show。 我看到的是,在这种情况下我不需要启动调度程序线程。 ShowDialog似乎在hoot下做到了。 但是关闭调度程序线程呢?在这种情况下,我是否需要通过调用 InvokeShutdown 来明确地执行此操作? 或者窗口上的close方法是否已处理?

1 个答案:

答案 0 :(得分:0)

关于调用Dispatcher.InvokeShutdown()所描述的问题是,在启动线程后,线程将不会自然退出,直到Dispatcher.Run()方法返回,并且它不知道要做什么直到你致电InvokeShutdown()。请注意,这与Winforms API形成对比,在Winforms API中,您可以将Form实例引用传递给Application.Run()方法,并且当Form实例已关闭时,将返回该方法

在调用ShowDialog()的情况下,不会创建新线程:对话框窗口在当前线程中处理。因此,显然没有阻塞用于窗口的线程的风险;它是当前的线程,并且您知道在窗口关闭后它没有被阻止,因为ShowDialog()方法将控制权返回给您自己的代码。

所以,不。在使用InvokeShutdown()的情况下,您无需担心调用ShowDialog()