在托管的Winforms控件中发生异常后,在WPF应用程序中继续执行

时间:2012-09-21 14:56:01

标签: wpf winforms exception windowsformshost

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

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

只有在AppDomain.CurrentDomain.UnhandledException处理程序中我才能“抓住”它,但从那时起我就做不了多少,应用程序就会退出。

然后我发现a stackoverflow question (有一个答案;现在找不到),其中声称要尝试这样做:

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

这也没有帮助,因为(内联)处理程序没有被调用过。

我去了wrong way吗?

2 个答案:

答案 0 :(得分:3)

我不确定为什么在你的情况下永远不会调用该处理程序,可能是因为没有在 Windows Forms 线程(创建表单和控件的线程)上抛出异常,但一般来说,为DispatcherUnhandledExceptionAppDomain.UnhandledException和/或Application.ThreadException设置处理程序并不能阻止您终止流程。它们是事件处理程序,而不是异常处理程序。即使您已设置了这些事件处理程序,未处理的异常仍然是未处理的异常。通常它们用于添加一些最终日志记录或向用户显示有意义的消息。一旦出现未处理的异常,您就无法阻止该过程的终止。

答案 1 :(得分:0)

可能抛出的异常是CSE(损坏的状态异常)。要处理这些类型的异常,请对该函数使用 [HandleProcessCorruptedStateExceptions] 属性。