当我的应用程序关闭时,我正在订阅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();
正确报告事件。我怀疑问题与我的应用程序关闭时释放这些对象的方式有关。如何防止错误?我应该在应用程序关闭之前明确地处理观察者,范围和查询吗?
答案 0 :(得分:4)
嗯,WMI启用了COM,例外并不完全神秘。我怀疑在终结器中有一场比赛,尝试通过调用观察者的Stop()方法来修复它,然后再让程序终止。