2011-12-19 4 views
5

У меня возникла проблема с прикреплением обработчика события к ItemAdd событиям общей папки.Событие 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 вы используете делегат, callcback.? трудно сказать, не видя, что у вас есть до сих пор спасибо – MethodMan

ответ

3

Continuous сделал прибегая к помощи своей работы. Я нашел, как решить проблему. Похоже, я не единственный, кто это переживает.

Я добавил ссылку на коллекцию 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"); 
    } 
{ 

Теперь он работает, как ожидалось. Хотя я не понимаю всех деталей, которые они говорят, это проблема сбора мусора. В конечном итоге мой обработчик событий был выброшен в мусор. Ссылка на коллекцию «Элементы» в глобальном масштабе предотвращает это.

+0

Удивительный, я сидел здесь, ища именно эту штуку ... – keynesiancross

Смежные вопросы