【问题标题】:How do I intercept a NotImplementedException in a WPF application?如何在 WPF 应用程序中拦截 NotImplementedException?
【发布时间】:2009-02-12 15:59:36
【问题描述】:

如何在 WPF 应用程序中拦截 NotImplementedException?

在测试正在进行的 WPF 应用程序时,我偶尔会抛出 NotImplementedException:

Private Sub ButtonDoSomething_Click(...) Handles ButtonDoSomething.Click
    Throw New NotImplementedException( _
        "ButtonDoSomething_Click() not implemented.")
End Sub

但是,我希望这些不会导致程序崩溃。

我可以将所有此类异常抛出替换为:

MessageBox.Show("ButtonDoSomething_Click() not implemented.", _
    "Not Implemented", MessageBoxButton.OK, MessageBoxImage.Information)

但这似乎有点不雅,如果 NotImplementedException 被隐藏在界面之外,这将不起作用。

如何捕获所有此类异常并显示消息框?

【问题讨论】:

    标签: .net wpf exception messagebox notimplementedexception


    【解决方案1】:

    您可以附加到 Application 类上的 DispatcherUnhandledException 事件,该事件将在发生未处理的异常时引发。在那里,您可以检查传递给事件处理程序的 DispatcherUnhandledExceptionEventArgs 实例的 Exception 属性,以查看它是否属于 NotImplementedException 类型。如果是,则将 Handled 属性设置为 true,然后返回。

    需要注意的是,如果您调用 MsgBox 而不是抛出异常,您将遇到必须实际返回某些内容并设置所有 out/ref 参数的问题,这将是额外的开销。

    【讨论】:

      【解决方案2】:

      查看 Application.DispatcherUnhandledException 或 AppDomain.UnhandledException。两者都可以让您处理其他未处理的异常。

      【讨论】:

      • 是的,但是,AppDomain.UnhandledException 是当检测到未处理的异常时由 AppDomain 引发的事件。无论您做什么,该应用都会立即关闭。
      【解决方案3】:

      您可以使用Debug.Fail,而不是抛出 NotImplementedException 或使用 MessageBox。例如:

      Debug.Fail("This method is not implemented yet!");
      

      它会弹出一个带有您提供的文本的消息框并向您显示堆栈跟踪。

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多