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);
}