2017-06-25 44 views
0

我正在開發一個Outlook插件,並面臨問題,當我的回調NewMailEx沒有爲新增存儲調用。展望VSTO NewMailEx沒有爲新存儲開火

我的代碼看起來像未來:

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Application.ItemSend += Application_ItemSend; 
    Application.NewMailEx += Application_NewMailEx; 
} 

private void Application_NewMailEx(string EntryIDCollection) 
{ 
    logger.Debug("Received e-mail with ID: {0}", EntryIDCollection); 

    var outlook_namespace = Application.GetNamespace("MAPI"); 
    dynamic item = outlook_namespace.GetItemFromID(EntryIDCollection); 

    if (!(item is Outlook.MailItem)) 
     return; 

    // do some stuff with mail 
} 

我也試着認購新存儲:

{ 
    Application.Session.Stores.StoreAdd += Stores_StoreAdd; 
} 

private void Stores_StoreAdd(Outlook.Store store) 
{ 
    logger.Info("New store is added: " + store.DisplayName); 
    Outlook.MAPIFolder rootFolder = store.GetRootFolder(); 
    Outlook.MAPIFolder inbox = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 
    inbox.Items.ItemAdd += items_ItemAdd; 
} 


private void items_ItemAdd(object item) 
{ 
    if (item is Outlook.MailItem) 
    { 
     Outlook.MailItem mail = item as Outlook.MailItem; 
     // do some stuff with mail 
    } 
} 

但ItemAdd只調用了同步過程中的項目。對於新郵件,NewMailEx和ItemAdd都不會被調用。

但重啓後,一切正常,NewMailEx照常工作。

你有任何想法如何解決它或一些解決方法?

回答

0

您的items_ItemAdd事件處理程序永遠不會觸發,因爲您對由編譯器在行inbox.Items.ItemAdd += items_ItemAdd上創建的隱式變量設置了事件處理程序。您需要將Items對象保存在專用變量器(或更好的事件List<Items>)中以確保它保持活動狀態,並且GC永遠不會釋放它。

+0

謝謝,它現在的作品! – user1570891