Исключение получения COM-события WMI в оснастке MMC - PullRequest
0 голосов
/ 18 ноября 2009

Я пытаюсь создать оснастку 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 Ответ

0 голосов
/ 19 ноября 2009

ОК, это было невероятно глупо ... но реальность состояла в том, что метод, который я вызывал через Invoke, вызывал исключение, и он не пузырился, как ожидалось, вызывающему, а вместо этого показывал как странный COM исключение. Как только я очистил исключение в методе, который вызывал через делегат, все заработало нормально.

...