0

我正在尝试创建一个 MMC 管理单元,除其他外,它将接收并显示从我的服务触发的日志事件。我已经创建了观察程序并且它可以正确触发,但是当我尝试将节点添加到我的 MmcListView 时,我收到一个 COMException,上面写着“无法使用已与其底层 RCW 分离的 COM 对象”。

这是有问题的代码:

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 对象添加到 MmcListView 的 ResultNodes 列表的实际工作。

我提到的异常实际上是在被触发的 SECOND 事件上调用的,并且似乎发生在对 InvokeRequired 的调用上。我不知道这里到底发生了什么。有任何想法吗?

4

1 回答 1

0

好吧,这太愚蠢了……但事实是我通过 Invoke 调用的方法抛出了一个异常,它并没有像调用者预期的那样冒泡,而是显示为奇怪的 COM 异常。一旦我清除了我通过委托调用的方法中的异常,一切正常。

于 2009-11-19T17:04:02.963 回答