在托管的WinForms控制异常后继续在WPF应用程序执行(Continuing execution

2019-09-22 17:41发布

我有一个在其中一个第三方的WinForms控制托管在一个WindowsFormsHost一个WPF应用程序。 有时,因为第三方的WinForms控制中的一个错误,我得到一个NullReferenceException

虽然我已成立了一个DispatcherUnhandledException处理程序我不能没有捕获该异常并继续执行。

只有在AppDomain.CurrentDomain.UnhandledException处理程序,我可以“捕获”,但我不能做太多从那时起,该应用程序简单地退出。

然后我发现一个计算器的问题 (一个答案,现在不能找到它),其中指出,试图做到这一点:

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

这并没有帮助,因为(在线)处理没有得到过叫。

我要去的错误的方式 ?

Answer 1:

我不知道为什么会处理从来没有在你的情况下被调用,可能是因为该例外是不是在Windows窗体线程(在其窗体和控件已创建的线程)抛出,但通常,设立处理DispatcherUnhandledExceptionAppDomain.UnhandledException和/或Application.ThreadException不允许您阻止进程的终止。 他们是事件处理程序,没有异常处理程序。 未处理的异常仍然是,即使你已经设置的事件处理程序未处理的异常。 通常它们被用来添加一些最终记录或呈现有意义的消息给用户。 一旦未处理的异常升高有什么可以做,以阻止进程的终止。



Answer 2:

也许抛出的异常是一个CSE(损坏状态异常)。 为了处理这些类型的异常,请使用[HandleProcessCorruptedStateExceptions]属性该功能。



文章来源: Continuing execution in WPF app after an exception in a hosted Winforms control