Items_Item Добавить прослушиватель для папки и ее подпапок в Outlook

Я разрабатываю некоторые расширения COM-расширения для Outlook и хочу вызвать событие, когда элемент помещается в определенную папку или ее подпапку. Я использую метод Items_ItemAdd для прослушивания событий отбрасывания. Это работает нормально, если элемент помещается в "родительскую" папку, но ничего не происходит, когда элемент помещается в подпапку.

Вот код, который я использую:

private void ThisAddIn_Startup(object sender, System.EventArgs e
{
    foreach (Outlook.Folder folder in foldersPaths)
    {
       costumUserFolder = folder.Items;
       costumUserFolder.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
    }
}

folderPaths - это список Outlook.Folder и содержит папку, которую я хочу прослушивать для событий, и все ее подпапки.

Я слушаю эти события в Items_ItemAdd метод.

Есть идеи?

1 ответ

Вам необходимо установить приемник событий в коллекции Items каждой папки.

Чтобы убедиться, что все объекты Items живы во время работы вашего приложения, сохраняйте элементы в списке (например, List<Outlook.Items>)

    //Please find the implemented tested working Solution:


    Outlook.Items oMailItems = null; //Globally declared object
    List<Outlook.Items> allInboxFolder = new List<Outlook.Items>(); //Globally declared
Outlook.MAPIFolder inbox = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
    //Implemented Threading for each item recieved to Inbox Folder
    //Outlook.Items oMailItems = null; //Globally declared object
    oMailItems = inbox.Items;
    oMailItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(ThreadStarter);
    allInboxFolder.Add(oMailItems); //make all subfolders events live
    foreach (Outlook.Folder folder in inbox.Folders)
    {
        oMailItems = folder.Items;
        oMailItems.ItemAdd += new   Outlook.ItemsEvents_ItemAddEventHandler(ThreadStarter);
        allInboxFolder.Add(oMailItems);
    }

    private void ThreadStarter(Object Item)
    {
        //InboxFolderItemAdded invoked by thread
        System.Threading.Thread IncomingMailThread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(this.InboxFolderItemAdded));
        IncomingMailThread.IsBackground = true;
        IncomingMailThread.Start(Item);
    }
Другие вопросы по тегам