Dispatcher.CurrentDispatcher.BeginInvokeShutdown关闭主线程c#
本文关键字:线程 CurrentDispatcher BeginInvokeShutdown Dispatcher | 更新日期: 2023-09-27 18:30:12
我正在使用在一个单独的线程中打开一个wpf UI
helperThread = new Thread(() =>
{
//ShowHelpInDialog(e.Url, -1, -1, -1, -1, e.HelpContext);
//System.Windows.Threading.Dispatcher.Run();
dispatcher.Invoke(new Action(() => ShowHelpInDialog(e.Url, -1, -1, -1, -1, e.HelpContext)));
});
helperThread.SetApartmentState(ApartmentState.STA);
helperThread.IsBackground = true;
helperThread.Start();
在对话框关闭事件期间,我正在呼叫
Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);
这导致主线程/应用程序关闭,这是我不想要的。
我不希望我的父应用程序关闭。
请观察以下关于如何从另一个线程打开新Window
的示例:
private void NewWindowHandler(object sender, RoutedEventArgs e)
{
Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
}
private void ThreadStartingPoint()
{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
从MSDN上
Threading Model
页面的"多窗口、多线程"部分。
更新>>>
这段代码经过了100%的测试,肯定会在一个新线程中打开一个新的Window
。如果你不想关闭另一个Window
,那么不要调用会关闭Window
的BeginInvokeShutdown
方法。您在运行在MAIN线程上的Dispatcher.CurrentDispatcher
上调用它(MainWindow.xaml
正在运行)。
您必须在对话框的Dispatcher
上调用BeginInvokeShutdown
,而不是在Dispatcher.CurrentDispatcher
上调用。
您的对话框关闭事件处理程序应该如下所示:
dialog.Closed += (sender, e) => dialog.Dispatcher.BeginInvokeShutdown();