Событие ItemAdd в общей папке на Exchange - PullRequest
5 голосов
/ 19 декабря 2011

У меня проблема с подключением обработчика событий к событию ItemAdd из общей папки.

Проблема в том, что обработчик событий перестает вызываться после нескольких успешных вызовов.

Код тривиален.У меня есть класс 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);
    }
}

1 Ответ

3 голосов
/ 20 декабря 2011

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

Я добавил ссылку на коллекцию 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 в глобальной области видимости предотвращает это.

...