为什么 WPF 吞咽 Window.Activated 的事件处理程序中引发的异常?

2024-03-20

简单的 WPF 应用程序,带有简单、空的内容Window其中我将事件处理程序连接到窗口Activated event:

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

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

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

Why?


这可能是与在 64 位操作系统上运行 32 位应用程序相关的问题。如果是这样的话,那么博客文章保罗·贝茨 http://blog.paulbetts.org/index.php/2010/07/20/the-case-of-the-disappearing-onload-exception-user-mode-callback-exceptions-in-x64/应该可以让您很好地了解发生了什么。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 WPF 吞咽 Window.Activated 的事件处理程序中引发的异常? 的相关文章

随机推荐