WPF窗口对话框使用Window类中的ShowDialog方法显示,就像在主窗口上按下按钮一样,如下所示。WPF ShowDialog在窗口加载期间吞咽异常
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调用,也不会返回。吞下异常并且窗口仍然显示。
为什么会发生这种情况,我将如何处理WPF窗口的Window_Loaded事件中的异常?我是否必须在事件处理程序中捕获它并手动处理窗口?
在的WinForms,你需要调用Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
为了让异常泡沫通过ShowDialog的呼吁。是否有需要在WPF上设置的类似开关?
我试图重现您的情况,但没有成功。例外情况通常会被捕获。 我想,你已经简化了代码,但看起来主要点在细节。提供他们,我会尽力帮助。 – 2011-01-26 17:20:28
感谢您试图重现。我从一个非常简单的例子中转载了这个问题,从我发布的源代码的位置开始。我使用VS2010。我将编辑我的问题并添加一些相关信息以进行复制。 – vidstige 2011-01-27 07:58:24