0

アイテムが削除済みアイテムフォルダーに追加されたときに機能するOutlook用のC#プラグインに取り組んでいます。大まかに言えば、コードは次のようになります。メソッドを追加するとログベントが表示されますが、アイテムを削除しても、他のログイベントは発生しません。私は何が欠けていますか?

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
    try
    {
    Outlook._Application olApp = new Outlook.ApplicationClass();
    Outlook._NameSpace olNS = olApp.GetNamespace("MAPI");
    Outlook.MAPIFolder deletedFolder = olNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems);
    deletedFolder.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(DeletedItems_ItemAdd);
    log("addDeletedItemEventHandler method added", LogLevel.Debug);
    }
    catch (Exception e)
    {
    log("Exception in addDeletedItemEventHandler: " + e.Message, LogLevel.Error);
    }
}


private void DeletedItems_ItemAdd(object Item)
{
    log("DeletedItems_ItemAdd - Fired", LogLevel.Debug);
}

ドミトリーの解決策は正しかった。この問題を解決しようとしている他の人のために:
私はクラスレベルで以下を定義しました:Outlook.Items oiDeletedFolderItems;

そして、OnConnectionメソッドで、次を追加/変更しました。oiDeletedFolderItems = deleteFolder.Items; oiDeletedFolderItems.ItemAdd + = new Outlook.ItemsEvents_ItemAddEventHandler(DeletedItems_ItemAdd);

4

1 に答える 1

4

イベント(アイテム)を発生させるCOMオブジェクトは、イベントを発生させるために有効である必要があります。あなたの場合、コンパイラはdeletedFolder.Itemsへの呼び出しの結果を保持するために一時変数を作成します。その変数がガベージコレクションされるとすぐに、イベントは発生を停止します。

Itemsオブジェクトをクラス変数に格納し、そのオブジェクトにイベントをフックします。

于 2013-02-19T19:37:47.977 に答える