2017-06-25 4 views
0

Je développe un plugin Outlook et je suis confronté au problème lorsque mon rappel NewMailEx n'est pas appelé pour un nouveau stockage.Outlook VSTO NewMailEx ne lance pas de nouveau stockage

Mon code ressemble à la suivante:

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 
} 

J'ai essayé aussi de souscrire à un nouveau stockage:

{ 
    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 
    } 
} 

Mais ItemAdd est appelé uniquement pour les articles lors de la synchronisation. Pour les nouveaux mails, ni NewMailEx ni ItemAdd ne sont appelés. Mais après le redémarrage, tout fonctionne et NewMailEx fonctionne comme d'habitude.

Avez-vous des idées pour résoudre ce problème ou une solution de contournement?

Répondre

0

Votre gestionnaire d'événements items_ItemAdd ne sera jamais déclenché car vous avez configuré le gestionnaire d'événements sur une variable implicite créée par le compilateur sur la ligne inbox.Items.ItemAdd += items_ItemAdd. Vous devez enregistrer l'objet Items dans un variabler dédié (ou un événement mieux un List<Items>) pour vous assurer qu'il reste actif et que GC ne le libère jamais.

+0

Merci, ça marche maintenant !!! – user1570891