我有一个控制台应用程序,它在一个类似于这个例子的单独线程上打开一个模态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方法是否已处理?
答案 0 :(得分:0)
关于调用Dispatcher.InvokeShutdown()
所描述的问题是,在启动线程后,线程将不会自然退出,直到Dispatcher.Run()
方法返回,并且它不知道要做什么直到你致电InvokeShutdown()
。请注意,这与Winforms API形成对比,在Winforms API中,您可以将Form
实例引用传递给Application.Run()
方法,并且当Form
实例已关闭时,将返回该方法
在调用ShowDialog()
的情况下,不会创建新线程:对话框窗口在当前线程中处理。因此,显然没有阻塞用于窗口的线程的风险;它是当前的线程,并且您知道在窗口关闭后它没有被阻止,因为ShowDialog()
方法将控制权返回给您自己的代码。
所以,不。在使用InvokeShutdown()
的情况下,您无需担心调用ShowDialog()
。