gpt4 book ai didi

c# - 你能捕捉到 RaceOnRCWCleanup 异常吗

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:05 24 4
gpt4 key购买 nike

我的同事在下面写了这段代码“closeConnection()”,它抛出了一个类型的异常:

RaceOnRCWCleanup was detected

An attempt has been made to free an RCW that is in use. The RCW is in use on the active thread or another thread. Attempting to free an in-use RCW can cause corruption or data loss.

private static void closeConnection()
{
if(connection != null)
{
try
{
connection.Close(); // <-- this is the problem
}
catch(Exception)
{
}

connection = null;
}
}

由于此代码包含在 try { } catch { } block 中,因此我得出结论,您无法捕获此类异常。是这样吗?

最佳答案

这不是异常,这是调试器警告。它是“托管调试助手”之一,旨在捕获可能导致以后很难诊断问题的常见错误。所以不,你不能用 try/catch 捕捉它。您可以使用 Debug + Exceptions、Managed Debugging Assistants、Thrown checkbox for "RaceOnRCWCleanup"关闭它。

可能是误报,但你应该为此担心一点。一般诊断是 connection.Close() 调用导致 COM 对象被释放。但它返回到由同一个 COM 对象启动的代码,通常是由于事件。这意味着它可能会返回到 COM 服务器内部的代码,该代码是现已销毁的 COM 对象的一部分。如果这是服务器无法处理的事情,它通常会发出一声巨响,通常是完全无法诊断的 AccessViolation。如果它没有爆炸并且你彻底测试了它然后继续并关闭警告。或者想办法稍后再调用Close(),勾选this answer举个例子。

关于c# - 你能捕捉到 RaceOnRCWCleanup 异常吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com