Чтобы ваши обработчики событий могли выжить при сборке мусора - вам нужно обеспечить поддержку объектов, содержащих ваши события, добавив их в качестве закрытой переменной-члена. Попробуйте добавить переменную частного класса Application
, и ваша подписка на события должна работать нормально. См. связанный SO сообщение для более подробной информации.
private Microsoft.Office.Interop.Outlook.Application application;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
application = this.Application;
Explorers = application.Explorers;
// ...
application.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx );
}
Другая обнаруженная вами проблема заключается в том, что NewMailEx
срабатывает только для вашего основного почтового ящика, а не для вторичных почтовых ящиков, как подтверждено в этом сообщении на форуме . Вам нужно будет положиться на Folder.Items
событие ItemAdd
.
private Outlook.Items mFolderItems;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// ...
mFolderItems = mFolder.Items; // avoid GC for ItemAdd event
mFolderItems.ItemAdd += new ItemsEvents_ItemAddEventHandler(mFolder_ItemAdd);
// ...
}
private void mFolder_ItemAdd(object addedItem)
{
Outlook.MailItem newItem = addedItem as Outlook.MailItem;
}