2009-05-04 4 views
0

J'écris un addin Outlook 2007. Tout ce que je fais est:Add-in Outlook 2007 - Problème lors de l'utilisation de l'événement BeforeItemMove

 private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     Outlook.Folder root; 

     //creates Spam folder if it dosen't exist 
     if (!SpamFolderExist()) 
     { 
      CreateSpamFolder(); 
     } 

     root = (Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder(); 

     //set BeforeItemMove event for spam and inbox folders 
     spamFolder = (Outlook.Folder)root.Folders["Spam"]; 
     inboxFolder = (Outlook.Folder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 

     spamFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromSpam); 
     inboxFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(BeforeItemMoveFromInbox); 

     //set new mail event 
     this.Application.NewMail += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_NewMailEventHandler(OnNewMail); 
    } 

Et le problème est que, même si je suis en train d'écrire rien dans les méthodes BeforeItemMoveFromInbox et BeforeItemMoveFromSpam, l'application a un comportement étrange. Après avoir déplacé certains mails, il ne fait plus aucune action de déplacement pour un mail particulier. Il semble que le courrier est bloqué et que je ne peux pas le déplacer. Après avoir effectué d'autres actions de déplacement, les autres mails sont bloqués et celui qui a été précédemment bloqué peut être déplacé. L'idée est qu'une fois qu'un mail est bloqué, il y aura toujours au moins un mail qui ne pourra pas être déplacé. En d'autres termes, certaines actions en mouvement échouent au hasard. Je dois dire que je ne fais rien d'autre que de déplacer des mails d'un dossier à un autre et que je n'obtiens aucun message d'erreur. J'ai également essayé de définir le paramètre cancel des gestionnaires d'événements BeforeItemMove à false juste à la fin des méthodes mais j'ai eu le même comportement.

Répondre

1

Vous l'avez 76mel. J'ai eu le même problème (le simple fait de connecter un dossier à l'événement BeforeItemMove l'a fait de sorte que lorsque je déplaçais un message hors de ce dossier, je ne pouvais pas le déplacer du nouveau dossier vers un autre dossier pendant un petit moment) . L'ajout de Marshal.ReleaseComObject() à la fin du gestionnaire d'événements le corrige parfaitement.

+0

Oublier Marshal.ReleaseComObject() est un problème courant lors de l'utilisation de COM et Outlook – 76mel

0

Si je comprends bien votre description du problème ci-dessus,

L'événement est mise à feu si vous déplacez l'élément de boîte de réception dans le dossier spam, mais il ne fonctionne pas si vous déplacez le même point de retour. ?? comme vous devez accrocher l'événement pour tous les dossiers que vous allez déplacer.

ce qui peut se passer est que vous pourriez avoir à libérer l'objet dans votre gestionnaire d'événements Marshal.ReleaseComObject()

Questions connexes