.net 如何消除COM上下文错误

.net 如何消除COM上下文错误,.net,com,interop,.net,Com,Interop,我正在处理一个windows窗体应用程序,它使用互操作调用COM dll。 我在app方法中不断遇到这个错误,流程如下: 1.从数据库中获取约7条记录[R] 2.对于每个记录,应用程序使用互操作实例化一个COM类,并使用该类进行一些处理/计算。 3.然后应用程序为每个记录R获取大约750条记录。 4.然后,应用程序在步骤3中为每个记录更新数据库中的数据 ContextSwitchDeadlock was detected Message: The CLR has been una

我正在处理一个windows窗体应用程序,它使用互操作调用COM dll。 我在app方法中不断遇到这个错误,流程如下:

1.从数据库中获取约7条记录[R] 2.对于每个记录,应用程序使用互操作实例化一个COM类,并使用该类进行一些处理/计算。 3.然后应用程序为每个记录R获取大约750条记录。 4.然后,应用程序在步骤3中为每个记录更新数据库中的数据

    ContextSwitchDeadlock was detected
    Message: The CLR has been unable to transition from COM context 0x1c8be8 to COM context 0x1c8a78 for 60 seconds. The thread that owns the destination 
    context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation 
    generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. 
To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump 
messages during long running operations.
仅供参考,我正在使用System.Runtime.InteropServices.Marshal.ReleaseComObject来释放COM对象实例。 有什么办法吗?请建议


谢谢。

您是COM对象的所有者吗?您的解决方案将更改其线程模型,或者仔细查看,尤其是关于发布的部分。

我过去常常遇到这个错误,但只有在调试模式下才会出现。您在发布模式下也会遇到这个错误吗?

谢谢您的评论。我只是在调试模式下才遇到这个错误。这是因为一个长时间运行的进程导致的吗?多线程/异步调用能解决这个问题吗?我过去只会点击“确定”,进程就会恢复。这很烦人,但我从不费心去寻找解决办法。