如何处理COM库从工作线程抛出的异常?

时间:2016-11-09 15:42:45

标签: c# multithreading exception com

我正在构建一个使用COM库的.Net应用程序(我真的很擅长COM,但它是一个我需要使用class UserMessage < ActiveRecord::Base end 注册的库,一旦在visual studio中引用它就说文件类型是ActiveX)。

在控制台应用程序中,我正在创建一个新的COM对象:

regsvr32

因此应用程序在主线程上同步初始化Api并等待static void Main(string[] args) { var comObj = new EikonDesktopDataAPI(); comObj.OnStatusChanged += EikonDesktopDataApi_OnStatusChanged; comObj.Initialize(); Console.ReadLine(); } private void EikonDesktopDataApi_OnStatusChanged(EEikonStatus status) { try{ throw new Exception("An exception 1."); }catch(Exception ex){ throw new Exception("Tell the main thread." , ex); } } 。几秒钟后,触发Console.ReadLine()事件。在调试时,我可以看到这是在工作线程上处理的。由于异常被抛出在另一个线程上,控制台应用程序不会崩溃。我怎么能抓住这个例外?

我尝试在Main方法上添加EikonDesktopDataApi_OnStatusChanged,但这会导致事件永远不会被引发。

我也尝试过使用:

SLAThreadAttribute

但是也没有处理异常。

我找到的唯一方法&#34; catch&#34;例外是使用:

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

但这导致处理程序方法处理3个例外:AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException; ,然后是"An exception 1",最后是"Tell the main thread."。这意味着我将处理甚至&#34;抓住&#34;异常是不切实际的。

有什么想法吗?

修改

我做了一个WPF应用程序,我从主线程实例化COM对象。初始化后,引发事件并且我的事件处理程序在MAIN线程上运行,但是如果我抛出异常,它不会使应用程序崩溃或引发"Exception has been thrown by the target of an invocation"事件。我真的不明白为什么在主线程上抛出的异常什么都不做。

0 个答案:

没有答案