WMI异常:“无法使用已与其基础RCW分离的COM对象”

时间:2010-10-17 15:29:39

标签: c# winforms com wmi

当我的应用程序关闭时,我正在订阅WMI事件并收到“ COM对象已与其基础RCW分离,无法使用”错误。这个问题已被问到before,但它与我的情况完全不同。

我从主线程中调用此代码:

string strComputer = @".";
ManagementScope scope = new ManagementScope(@"\\" + strComputer + @"\root\wmi");
scope.Connect();

EventQuery query = new EventQuery("Select * from MSNdis_StatusMediaDisconnect");

ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);

watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); // some function that does stuff when the event occurs.
watcher.Start();

正确报告事件。我怀疑问题与我的应用程序关闭时释放这些对象的方式有关。如何防止错误?我应该在应用程序关闭之前明确地处理观察者,范围和查询吗?

1 个答案:

答案 0 :(得分:4)

嗯,WMI启用了COM,例外并不完全神秘。我怀疑在终结器中有一场比赛,尝试通过调用观察者的Stop()方法来修复它,然后再让程序终止。