【问题标题】:Why does WPF swallow an exception thrown in an event handler for Window.Activated?为什么 WPF 会吞下 Window.Activated 的事件处理程序中引发的异常?
【发布时间】:2012-09-03 17:06:48
【问题描述】:

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

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

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

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

为什么?

【问题讨论】:

  • 我也经常注意到这种情况,我不确定原因。

标签: .net wpf exception


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2011-01-05
    • 2013-10-11
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多