在托管的 Winforms 控件中出现异常后,在 WPF 应用中继续执行



我有一个WPF应用程序,它有一个WindowsFormsHost,其中托管了第三方WinForms控件。有时,由于第三方WinForms控件中的错误,我得到了一个NullReferenceException

尽管我已经设置了一个DispatcherUnhandledException处理程序,但我无法在那里捕获异常并继续执行。

只有在AppDomain.CurrentDomain.UnhandledException处理程序中,我才能"捕获"它,但从那时起我无能为力,应用程序只是退出。

然后我找到了一个堆栈溢出问题(有一个答案;现在找不到它),它说要尝试这样做:

        System.Windows.Forms.Application.ThreadException += (sender, args) => { /* Catch it here */};
        System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

这也无济于事,因为(内联)处理程序从未被调用过。

我走错路了吗?

我不确定为什么在您的情况下永远不会调用该处理程序,可能是因为异常未在 Windows 窗体线程(已在其上创建窗体和控件的线程)上引发,但通常,为 DispatcherUnhandledExceptionAppDomain.UnhandledException 和/或Application.ThreadException设置处理程序不允许阻止进程终止。它们是事件处理程序,而不是异常处理程序。即使已设置这些事件处理程序,未处理的异常仍然是未处理的异常。通常,它们用于添加一些最终日志记录或向用户显示有意义的消息。引发未处理的异常后,您无法执行任何操作来阻止进程终止。

也许引发的异常是 CSE(损坏的状态异常)。若要处理这些类型的异常,请对该函数使用 [HandleProcessCorruptedStateExceptions] 属性。

相关内容

  • 没有找到相关文章

最新更新