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

StackOverflow https://stackoverflow.com/questions/821471

Вопрос

Я пишу надстройку для 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 только в конце методов, но я получил то же поведение.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top