在我的解决方案中,我的主项目是一个WPF c#项目。在解决方案中,我需要集成一个遗留项目,即VB winforms项目。这是通过WPF项目中的包装类完成的,该类操作来自我的遗留项目的一些公共对象。
在我的WPF项目中,我已经实现了Application_DispatcherUnhandledException,以便将异常冒泡到这里,我将它们记录在我们的数据库中进行调试。
我遇到的问题是,只要遗留项目中的某些内容崩溃(例如NullReferenceException),代码就永远不会到达主WPF项目中的Application_DispatcherUnhandledException实现。
是否可以将所有未处理的异常从WinForms项目重定向到WPF项目?
答案 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);
}
}