Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用已与其基础RCW分离的COM对象_C#_Winforms_Com_Interop_Multithreading - Fatal编程技术网

C# 无法使用已与其基础RCW分离的COM对象

C# 无法使用已与其基础RCW分离的COM对象,c#,winforms,com,interop,multithreading,C#,Winforms,Com,Interop,Multithreading,我有一些COM组件,我从一些c#dll调用它们 我还有一个winforms应用程序,它使用.dll 当我关闭应用程序时,会出现以下异常: 已分离的COM对象 不能从其基础RCW 用过 堆栈跟踪显示此异常来自.dll中的析构函数。我实现了这个析构函数来调用COM中的一些清理方法 为什么会发生这种情况?如何最好地解决这个问题?这里描述了这个问题: 在这里: 问题在于,不仅是这些对象的时间 垃圾收集的顺序不确定,但 终结器也是不确定的。在这种情况下 运行时可调用包装器还有一个终结器,它调用 Mar

我有一些COM组件,我从一些c#dll调用它们

我还有一个winforms应用程序,它使用.dll

当我关闭应用程序时,会出现以下异常:

已分离的COM对象 不能从其基础RCW 用过

堆栈跟踪显示此异常来自.dll中的析构函数。我实现了这个析构函数来调用COM中的一些清理方法


为什么会发生这种情况?如何最好地解决这个问题?

这里描述了这个问题:

在这里:

问题在于,不仅是这些对象的时间 垃圾收集的顺序不确定,但 终结器也是不确定的。在这种情况下 运行时可调用包装器还有一个终结器,它调用 Marshal.FinalEleaseComObject,其结果为 递减围栏COM侧的引用计数,以便 可以释放此COM对象。但是由于 终结器的调用是不确定的,很可能 对象引用将触发的COM对象的终结器 在对象的终结器之前。因此,您的 终结器有时可以工作,但大多数情况下,一个或多个 对象引用将具有的运行时可调用包装器 已调用其终结器,并且基础COM对象将 在终结器执行其代码之前已发布


我什么也没跟着!:xIt非常清楚:在您着手清理之前,您实例化的对象周围的COM包装器可能已经清理干净了。转换:如果您的Dispose()在基础x已超出范围时尝试调用Marshal.ReleaseCOMObject(x),则Dispose()将失败。必须检查范围/生命周期。感谢您提供的好链接,@Ran.Read这是:可能重复的