【发布时间】:2011-04-26 14:45:14
【问题描述】:
我正在订阅 WMI 事件,并在我的应用程序关闭时收到“无法使用与其底层 RCW 分离的 COM 对象”错误。有人问过这个问题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();
事件报告正确。我怀疑这个问题与我的应用程序关闭时这些对象被释放的方式有关。如何防止错误?我应该在我的应用程序关闭之前显式处理观察者、范围和查询吗?
【问题讨论】:
-
非常老的问题,但由于这是 COM RCW 上的第一次命中,我想补充一点,当您在处理某些 COM 对象之前关闭窗口时,通常会发生这种情况(因为它们隐式依赖于 Window处理)。在
Window.OnClosing事件中添加一些清理代码可以解决这个问题。