2011-12-19 1 views
5

イベントハンドラをパブリックフォルダのItemAddイベントに添付する際に問題があります。アイテムExchangeのパブリックフォルダのイベントを追加しました

イベントハンドラがいくつかの呼び出しが成功した後で呼び出されなくなるという問題がありました。

コードは簡単です。私はオブジェクトを作成するThisAddInクラスを持っています。このオブジェクトは、コンストラクタのItemAddイベントに関数をアタッチします。関数はメッセージボックスをポップアップさせるだけです。

正しい方向に指摘してください。私はどこでエラーを探すべきか分かりません。

はここで、事前に アナトリー

をありがとう、私が実行しようとするテストコードです:

public partial class ThisAddIn 
{ 
    internal static Outlook.Folder posts_folder = null; 
    private static test t; 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 

     t = new test(); 
    } 
{ 

class test 
{ 
    public test() 
    { 
     System.Windows.Forms.MessageBox.Show("Attaching..."); 
     ThisAddIn.posts_folder.Items.ItemAdd +=new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 
    } 
    void Items_ItemAdd(object Item) 
    { 
     System.Windows.Forms.MessageBox.Show((Item as Outlook.PostItem).Subject); 
    } 
} 
+0

あなたはあなたのコードスニペットを投稿できますか?どのようにイベントハンドラを宣言していますか?EventHandlerVar + = new someeventHandlerまたは+ - someEventHandlerのようなものをあなたはDelegate、callcbackを使用していますか?これまでのところあなたが今までに何を見てもわからないのは難しいです – MethodMan

答えて

3

連続グーグルがその仕事をしました。私はこの問題を解決する方法を見つけました。私はそれを経験した唯一の人ではないようです。

私はグローバルスコープに追跡したいフォルダのItemsコレクションへの参照を追加しました:予想通り

internal static class stor 
{ 
    public static Outlook.Items i; 
} 

public partial class ThisAddIn 
{ 
    internal static Outlook.Folder posts_folder = null; 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     // the code for finding a posts_folder is omitted 

     stor.i = posts_folder.Items; 
     stor.i.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Posts_Add); 
    } 

    static void Posts_Add(object Item) 
    { 
     System.Windows.Forms.MessageBox.Show("New item"); 
    } 
{ 

は、今では動作します。私はすべての細部を理解していませんが、それはガベージコレクションの問題です。イベントハンドラは最終的にゴミに投げ込まれました。グローバルスコープのItemsコレクションへの参照は、これが起こらないようにします。

+0

すごく、私はここに座ってこの事を正確に探していました... – keynesiancross