Исключение 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-исключение. Как только я очистил исключение в методе, который вызывал через делегат, все работало нормально.

Другие вопросы по тегам