wpf - 在 WPF 应用程序中使用 winforms 默认异常处理程序

标签 wpf winforms exception

对于简单的“仅供内部使用”的应用程序,Winforms 有一个有用的默认异常处理程序,它允许“忽略”,并告诉您异常是什么。

WPF 应用程序似乎没有获得这种良好的异常处理 - 您始终必须退出应用程序。

显然,我可以为 WPF 编写自己的默认异常处理程序,但是是否有一种简单的方法来使用 Winforms 框架中必须已经存在的异常处理程序,但使用 WPF?

最佳答案

我认为这个问题有两个部分:如何连接您自己的异常处理程序以便允许应用程序继续运行,以及是否可以重用 Windows 窗体未处理的异常 UI。

对于第一部分,请参阅Application.DispatcherUnhandledException。如果您订阅此事件,并且您的事件处理程序将 DispatcherUnhandledExceptionEventArgs.Handled 设置为 true,则 WPF 将跳过默认的未处理异常处理 - 即应用程序不会自动关闭。 (当然,您的事件处理程序仍然可以将其关闭。)默认情况下,Handled 未设置为 true,因此您必须显式执行此操作。

有关第二部分,请参阅 System.Windows.Forms.ThreadExceptionDialog。这正式“不适合在您的代码中使用”,并且没有以任何有用的方式进行记录,因此在生产应用程序中依赖它是不明智的。但是,如果您愿意冒险,那么您可以创建此类的实例并 ShowDialog() 它。在 .NET 3.5 中,它返回 DialogResult.Cancel 表示“忽略异常并继续”,返回 DialogResult.Abort 表示“退出”。这些值没有记录,但应被视为实现细节!

关于wpf - 在 WPF 应用程序中使用 winforms 默认异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623938/

相关文章:

c# - 翻转绘制文本/字符串的 GraphicsPath

java - 重写接口(interface)方法时删除 Java 检查异常?

java - GetResource 和 google io Files 会导致 jar root 中的文件出现 FileNotFoundException

c# - 在 Windows 窗体中托管 WPF 时出现问题 - C#

c# - 如何摆脱 Visual Studio 中的 "[some event] never used"编译器警告?

.net - 如何在运行时在代码中应用动态样式?

c# - 使用 Regex 的 DataValidation 不起作用

wpf - 错误 XLS0502 'WindowsFormsHost' 类型不支持直接内容

c# - 通过提供模数和指数进行 RSA 加密

c++ - 停在 "Exception Unhandled"的类和 visual studio 2019 未捕捉到异常