代码之家  ›  专栏  ›  技术社区  ›  Nick

在MMC管理单元中接收WMI事件时发生COM异常

  •  0
  • Nick  · 技术社区  · 15 年前

    我正在尝试创建一个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类是一个简单的类,它可以将ManagementBaseObject属性转换为易于编码的类型安全属性。addEvent方法完成将logEvent对象添加到mmclistview的resultNodes列表的实际工作。

    我提到的异常实际上是在被激发的第二个事件上调用的,并且似乎是在调用invokeRequired时发生的。我不知道这里到底发生了什么。有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Nick    15 年前

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