Domanda

Sto scrivendo un componente aggiuntivo di Outlook 2007. Tutto quello che sto facendo è:

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

E il problema è che, anche se non scrivo nulla nei metodi BeforeItemMoveFromInbox e BeforeItemMoveFromSpam, l'applicazione ha un comportamento strano. Dopo aver spostato alcuni messaggi, non esegue più alcuna azione di spostamento per un determinato messaggio. Sembra che una posta sia bloccata e non riesco proprio a spostarla. Dopo aver eseguito altre azioni in movimento, altri messaggi vengono bloccati e può essere spostato quello precedentemente bloccato. L'idea è che dopo il blocco di una posta ci sarà sempre almeno una posta che non può essere spostata. In altre parole in modo casuale alcune delle azioni in movimento falliscono. Devo dire che non sto facendo altro che spostare la posta da una cartella a un'altra e che non ricevo alcun messaggio di errore. Ho anche provato a impostare il parametro cancel dei gestori di eventi BeforeItemMove su false solo alla fine dei metodi, ma ho ottenuto lo stesso comportamento.

È stato utile?

Soluzione

L'hai preso 76mel. Ho avuto lo stesso problema (il solo aggancio di una cartella all'evento BeforeItemMove lo ha fatto in modo che quando ho spostato un messaggio fuori da quella cartella, non potevo spostarlo dalla nuova cartella in un'altra cartella per un breve periodo di tempo) .

L'aggiunta di Marshal.ReleaseComObject () alla fine del gestore eventi ha risolto il problema alla perfezione.

Altri suggerimenti

Se capisco la descrizione del problema sopra,

L'evento si attiva se sposti l'elemento dalla posta in arrivo alla cartella spam ma non funziona se sposti indietro lo stesso elemento. ?? poiché devi agganciare l'evento per la cartella alls da cui ti sposterai.

ciò che potrebbe accadere è che potresti dover rilasciare l'Oggetto nel gestore dell'evento Marshal.ReleaseComObject ()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top