【发布时间】:2020-11-01 20:30:53
【问题描述】:
让我们看一个带有两个 Window 类的简单 WPF 应用程序。 MainWindow 有一个控件 - 按钮 - 它创建了 AnotherWindow 实例。如果在创建之后在主线程退出ButtonMethod作用域之前发生了异常,那么在MainWindow关闭并消失后应用程序仍然在运行。
解决方法是将新窗口的 Owner 属性设置为 MainWindow 对象实例。
如果在创建另一个窗口的实例后没有w.Show() 或w.Close() 调用,即使没有任何异常抛出,应用程序也将继续运行。
问题:
-
在哪里描述了 WPF 窗口线程的这种行为?
-
什么是创建其他窗口的最佳实践,但要牢记例外可能性:设置窗口的
Owner,在某些finally范围内调用window.Close()或其他什么?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
ButtonMethod();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}
private void ButtonMethod()
{
Window w = new AnotherWindow();
// Uncomment the line below to fix freezing at the exit.
// w.Owner = this;
throw new Exception("Custom user exception!");
w.Show();
}
}
【问题讨论】: