ast*_*ght 1 c# exception visual-studio-2010
我的同事在下面写了这个代码"closeConnection()",并抛出了类型的异常:
检测到RaceOnRCWCleanup
已经尝试释放正在使用的RCW.RCW正在活动线程或另一个线程上使用.尝试释放正在使用的RCW可能会导致损坏或数据丢失.
private static void closeConnection()
{
if(connection != null)
{
try
{
connection.Close(); // <-- this is the problem
}
catch(Exception)
{
}
connection = null;
}
}
Run Code Online (Sandbox Code Playgroud)
由于此代码包含在try {} catch {}块中,因此我得出结论,您无法捕获此类异常.是这样的吗?
它不是一个例外,它是一个调试器警告.它是"托管调试助手"之一,旨在捕捉可能导致以后很难诊断问题的常见错误.所以不,你不能用try/catch来捕获它.您可以使用Debug + Exceptions,Managed Debugging Assistants,Thrown复选框将其关闭"RaceOnRCWCleanup".
这可能是一个误报,但你应该担心这一点.通用诊断是connection.Close()调用导致释放COM对象.但它返回到由同一个COM对象启动的代码,通常是由于一个事件.这意味着它可能返回到COM服务器内的代码,该服务器是现在销毁的COM对象的一部分.如果这是服务器无法处理的事情,它通常会发出响亮的声音,通常是完全不可识别的AccessViolation.如果它没有爆炸并且你彻底测试了这个,那么继续并关闭警告.或者找一种方法稍后调用Close(),查看这个答案的例子.
| 归档时间: |
|
| 查看次数: |
7730 次 |
| 最近记录: |