我有一个应用程序,为我的图形创建一个新窗口。我创建它的方式:
var thread = new Thread(() =>
{
var win = new MyWindow();
win.Show();
Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
问题是,当我关闭主应用程序时,其他窗口仍然打开,我需要手动关闭它。我将App.xaml
中的 ShutDownMode 设置为OnMainWindowClose
并覆盖OnClosed
:
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
Application.Current.Shutdown();
}
但它对我没有帮助。
答案 0 :(得分:4)
答案 1 :(得分:2)
在应用程序退出之前,确保您的线程已停止。 您可以使用Thread.Abort或使用Thread.Join等待它。
但这些是结束或等待线程的讨厌方式。最好的方法是使用bool来阻止它运行。
以下是如何以“干净”的方式阻止你的线程: https://stackoverflow.com/a/10664959/1661209
答案 2 :(得分:2)
如果要在窗口之间建立关系,则应设置新窗口的Owner属性:
var childWindow = new ChildWindow();
childWindow.Owner = this;
childWindow.Show();
现在,如果你关闭主窗口,它的所有孩子也会关闭。
答案 3 :(得分:1)
保持对您生成的线程的引用,并在退出应用程序时,通知线程退出某些线程(可能通过ManualResetEvent)。之后,你必须通过加入它来等待线程退出。
_thread.Join();