【发布时间】:2011-06-15 23:32:10
【问题描述】:
使用 Window 类中的 ShowDialog 方法显示 WPF 窗口对话框,就像在主窗口上按下按钮时一样。
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
var window = new Window1();
window.ShowDialog();
}
catch (ApplicationException ex)
{
MessageBox.Show("I am not shown.");
}
}
窗口在 xaml 中订阅了一个 Loaded 事件,如下所示:
<Window x:Class="Stackoverflow.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Loaded="Window_Loaded">
<Grid />
</Window>
Window_Loaded 事件中抛出异常
private void Window_Loaded(object sender, RoutedEventArgs e)
{
throw new ApplicationException();
}
但是,ShowDialog 调用周围的 catch 没有捕获到异常,调用也没有返回。异常被吞下,窗口仍然显示。
为什么会发生这种情况,我将如何处理 WPF 窗口的 Window_Loaded 事件中的异常?我必须在事件处理程序中捕获它并手动处理窗口吗?
在 WinForms 中你需要调用Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
为了让异常通过 ShowDialog 调用冒泡。是否有类似的开关需要在 WPF 上设置?
【问题讨论】:
-
我试图重现您的情况,但没有成功。以通常的方式捕获异常。我想,您已经简化了代码,但似乎重点在于细节。提供他们,我会尽力提供帮助。
-
感谢您尝试复制。我在一个非常简单的例子中重现了这个问题,我从这里获取了发布的源代码。我正在使用 VS2010。我将编辑我的问题并添加一些相关信息以进行复制。