对于简单的“仅供内部使用”的应用程序,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/