Надстройка Outlook 2007 - проблема с использованием события BeforeItemMove - PullRequest
0 голосов
/ 04 мая 2009

Я пишу надстройку для 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, приложение ведет себя странно. После того как я переместил несколько писем, он просто не выполняет никаких действий по перемещению для определенной почты. Кажется, почта заблокирована, и я просто не могу ее переместить. После выполнения других действий по перемещению другие письма блокируются, и ранее заблокированное письмо можно было переместить. Идея состоит в том, что после того, как почта заблокирована, это всегда будет по крайней мере одно письмо, которое не может быть перемещено. Другими словами, случайно некоторые из движущихся действий терпят неудачу. Я должен сказать, что я не делаю ничего, кроме перемещения писем из одной папки в другую, и я не получаю сообщения об ошибке. Я также попытался установить для параметра отмены обработчиков событий BeforeItemMove значение false только в конце методов, но я получил то же поведение.

Ответы [ 2 ]

1 голос
/ 01 февраля 2010

Ты получил 76мел. У меня была такая же проблема (просто подключение папки к событию BeforeItemMove сделало так, что когда я перемещал сообщение из этой папки, я не мог переместить его из новой папки в другую папку в течение небольшого количества времени) ,

Добавление Marshal.ReleaseComObject () в конец обработчика событий исправило его совершенно.

0 голосов
/ 06 мая 2009

Если я понимаю описание вашей проблемы выше,

Событие срабатывает, если вы перемещаете элемент из папки «Входящие» в папку со спамом, но оно не работает, если вы перемещаете тот же элемент обратно. ?? так как вам нужно перехватить событие для папки alls, из которой вы будете перемещаться.

может случиться так, что вам, возможно, придется освободить объект в вашем обработчике событий Marshal.ReleaseComObject ()

...