为什么WPF吞下Window.Activated的事件处理程序中抛出的异常?

时间:2012-09-10 19:39:02

标签: .net wpf exception

简单的WPF应用程序,带有一个简单的空Window,其中我将一个事件处理程序连接到Window的Activated事件:

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
        Activated += OnWindowActivated;
    }

    private void OnWindowActivated(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
}

当处理程序中抛出异常而其他地方未处理时,我预计应用程序会死掉,但事实并非如此。 WPF似乎在某个地方吞下了异常,并且Window弹出并继续正常运行。

为什么?

1 个答案:

答案 0 :(得分:2)

这可能是与在64位操作系统上运行32位应用程序相关的问题。如果是这种情况,那么Paul Betts的博客帖子应该可以让您了解正在发生的事情。

简而言之,对于32位进程,由于跨用户模式/内核模式边界传播异常的问题,.NET框架会占用您的异常。对于64位进程,这不会发生,因此测试这确实是您的问题的最简单方法是使用“任何CPU”平台重建测试应用程序并再次运行它。当我这样做时,它会像人们期望的那样崩溃。