3

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

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

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

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

为什么?

4

1 回答 1

2

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

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

于 2012-09-11T02:21:54.027 回答