将WinForm应用程序中的异常冒泡到WPF应用程序中。有可能吗?

时间:2018-01-30 21:58:38

标签: c# wpf vb.net winforms error-handling

在我的解决方案中,我的主项目是一个WPF c#项目。在解决方案中,我需要集成一个遗留项目,即VB winforms项目。这是通过WPF项目中的包装类完成的,该类操作来自我的遗留项目的一些公共对象。

在我的WPF项目中,我已经实现了Application_DispatcherUnhandledException,以便将异常冒泡到这里,我将它们记录在我们的数据库中进行调试。

我遇到的问题是,只要遗留项目中的某些内容崩溃(例如NullReferenceException),代码就永远不会到达主WPF项目中的Application_DispatcherUnhandledException实现。

是否可以将所有未处理的异常从WinForms项目重定向到WPF项目?

1 个答案:

答案 0 :(得分:0)

如果您可以发布一个包装器外观的示例,那就太好了。 你怎么“开始你的winforms应用程序” 您是否可以访问项目的实际Form类?

虽然这并不是“冒泡” - 但是可以编写一个包装器来强制异常在调度程序上“重新抛出”。

internal class WinFormsWrapper
{
    private Form _form;

    public WinFormsWrapper(Form f)
    {
        _form = f;            
    }

    public void Run()
    {
        //Winforms exceptions thrown on the message loop should go here
        //this handler will force them do be "rethrown" on the calling dispatcher
        System.Windows.Forms.Application.ThreadException += (wf_sender, wf_e) => { ExceptionDispatchInfo.Capture(wf_e.Exception).Throw(); };
        System.Windows.Forms.Application.Run(_form);
    }
}