Исключение COM, получающее событие WMI в оснастке MMC
Я пытаюсь создать оснастку MMC, которая, помимо прочего, будет получать и отображать события журнала, которые запускаются из моей службы. Я создал наблюдатель, и он срабатывает правильно, но когда я пытаюсь добавить узлы в мой MmcListView, я получаю исключение COMException, которое говорит: "COM-объект, который был отделен от лежащего в его основе RCW, не может быть использован".
Вот код, о котором идет речь:
private void LogEvent_EventArrived(object sender, EventArrivedEventArgs e)
{
LogEvent logEvent = new LogEvent(e.NewEvent);
if (SnapIn.InvokeRequired)
{
object[] args = new object[] { logEvent };
SnapIn.Invoke(new ManagementAction(AddEvent), args);
}
else
AddEvent(logEvent);
}
Класс LogEvent - это простой класс, который выполняет преобразование свойств ManagmentBaseObject в тип безопасных свойств, которые легко кодируются. Метод AddEvent выполняет фактическую работу по добавлению объекта LogEvent в список ResultNodes MmcListView.
Исключение, которое я упомянул, на самом деле вызывается при возникновении ВТОРОГО события и, похоже, происходит при вызове InvokeRequired. Я понятия не имею, что на самом деле здесь происходит. Есть идеи?
1 ответ
Хорошо, это было невероятно глупо... но реальность состояла в том, что метод, который я вызывал через Invoke, вызывал исключение, и он не пузырился, как ожидалось, вызывающему, а вместо этого показывался как странное COM-исключение. Как только я очистил исключение в методе, который вызывал через делегат, все работало нормально.