0

サービスから発生したログ イベントを受信して​​表示する MMC スナップインを作成しようとしています。ウォッチャーを作成し、正しく起動しますが、ノードを MmcListView に追加しようとすると、「基になる RCW から分離された COM オブジェクトは使用できません」という COMException が発生します。

問題のコードは次のとおりです。

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

OK、これは信じられないほど愚かでした...しかし、実際には、Invokeを介して呼び出していたメソッドが例外をスローし、呼び出し元に期待どおりにバブリングせず、代わりに奇妙なCOM例外として表示されていました。デリゲートを介して呼び出していたメソッドの例外をクリアすると、すべてが正常に機能しました。

于 2009-11-19T17:04:02.963 に答える