我正在使用
在单独的线程中打开一个wpf UIhelperThread = 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);
导致主线程/应用程序关闭,我不想要。
我不希望我的父应用程序关闭。
答案 0 :(得分:1)
请参阅以下有关如何从另一个线程打开新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
,请不要调用将BeginInvokeShutdown
关闭的Window
方法。你在Dispatcher.CurrentDispatcher
上调用它,它在MAIN线程上运行(MainWindow.xaml
正在运行)。
答案 1 :(得分:1)
您必须在对话框的BeginInvokeShutdown
上调用Dispatcher
而不是Dispatcher.CurrentDispatcher
。
您的对话框已关闭事件处理程序应如下所示:
dialog.Closed += (sender, e) => dialog.Dispatcher.BeginInvokeShutdown();