Исключение WMI: «COM-объект, который был отделен от базового RCW, не может быть использован» - PullRequest
3 голосов
/ 17 октября 2010

Я подписываюсь на событие WMI и получаю ошибку " COM, которая была отделена от лежащего в ее основе RCW, не может использоваться ", когда мое приложение закрывается.Этот вопрос задавался до , но он сильно отличается от моих обстоятельств.

Я звоню по этому коду из основного потока:

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 Ответ

4 голосов
/ 17 октября 2010

Ну, WMI включен COM, исключение не совсем загадочное. Я подозреваю гонку в финализаторе, попробуйте исправить ее, вызвав метод Stop () наблюдателя, прежде чем позволить своей программе завершиться.

...