0

Outlook 2007 アドインを作成しています。私がやっていることは次のとおりです。

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Outlook.Folder root;

        //creates Spam folder if it dosen't exist
        if (!SpamFolderExist())
        {
            CreateSpamFolder();
        }

        root = (Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder();

        //set BeforeItemMove event for spam and inbox folders
        spamFolder = (Outlook.Folder)root.Folders["Spam"];
        inboxFolder = (Outlook.Folder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

        spamFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromSpam);
        inboxFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromInbox);

        //set new mail event
        this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(OnNewMail);
    }

問題は、BeforeItemMoveFromInbox メソッドと BeforeItemMoveFromSpam メソッドに何も記述していない場合でも、アプリケーションの動作がおかしくなることです。いくつかのメールを移動した後、特定のメールに対してそれ以上移動アクションを実行しません。メールがブロックされているようで、移動できません。他の移動アクションを実行すると、他のメールがブロックされ、以前にブロックされたメールを移動できます。メールがブロックされた後は、移動できないメールが常に少なくとも 1 つあるという考えです。つまり、移動アクションの一部がランダムに失敗します。メールをフォルダから別のフォルダに移動する以外に何もしていないこと、およびエラーメッセージが表示されないことを言わなければなりません。また、メソッドの最後で、BeforeItemMove イベント ハンドラのキャンセル パラメータを false に設定しようとしましたが、同じ動作になりました。

4

2 に答える 2

1

あなたはそれを76ml手に入れました。私は同じ問題を抱えていました (フォルダーを BeforeItemMove イベントに接続するだけで、メッセージをそのフォルダーから移動したときに、新しいフォルダーからさらに別のフォルダーに移動できなくなりました) 短時間) .

イベントハンドラの最後に Marshal.ReleaseComObject() を追加すると、完全に修正されました。

于 2010-02-01T04:47:35.087 に答える
0

上記の問題の説明が理解できれば、

アイテムを受信トレイからスパム フォルダに移動するとイベントが発生しますが、同じアイテムを元に戻すと機能しません。?? 移動元の alls フォルダーのイベントをフックする必要があるためです。

発生している可能性があるのは、イベントハンドラー Marshal.ReleaseComObject() でオブジェクトを解放する必要がある場合があることです。

于 2009-05-06T16:28:13.267 に答える