COM异常接收MMC Snapin中的WMI事件

时间:2009-11-18 18:05:08

标签: .net com mmc mmc3

我正在尝试创建一个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列表的实际工作。

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

1 个答案:

答案 0 :(得分:0)

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