我有一个独立的.exe COM服务器和一个简单的C#测试程序,它启动服务器的一个实例并在之后立即关闭它。奇迹般有效。但是,如果我关闭C#程序本身,我在终结器运行期间会遇到异常,因为它试图从不再运行的COM服务器取消注册/取消注册COM事件接收器。
例外是
“mscorlib.dll中发生了System.Runtime.InteropServices.InvalidComObjectException类型的第一次机会异常”
和callstack:
mscorlib.dll!System.Runtime.InteropServices.ComEventsSink.Unadvise()+ 0x20 bytes mscorlib.dll!System.Runtime.InteropServices.ComEventsSink.RemoveAll(System.Runtime.InteropServices.ComEventsSink sinks)+ 0x11 bytes
mscorlib.dll!System.Runtime.InteropServices.ComEventsInfo.Finalize()+ 0x18 bytes
我可以通过在关闭服务器之前手动删除COM事件处理程序来修复此错误。即myComServer.OnFunkyEvent - = OnFunkyEventHandler;但是,我发现这种不优雅,容易出错且乏味。所以问题是,我可以以某种方式手动触发我的COM事件的RemoveAll()调用,以便它不会在终结器中运行吗?