5

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

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

只有在AppDomain.CurrentDomain.UnhandledException处理程序中我才能“捕捉”它,但从那时起我不能做太多事情,应用程序就会退出。

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

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

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

走错路了吗?

4

2 回答 2

3

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

于 2012-09-24T10:44:25.457 回答
0

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

于 2018-04-02T10:35:41.437 回答