Pergunta

Estou escrevendo um suplemento do Outlook 2007. Tudo o que eu estou fazendo é:

        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 o problema é que, mesmo se eu estou escrevendo nada nos métodos BeforeItemMoveFromInbox e BeforeItemMoveFromSpam, o aplicativo tem um comportamento estranho. Depois que eu estou movendo alguns e-mails, ele simplesmente não executa qualquer ação mais movimento para um e-mail particular. Parece que um e-mail é bloqueado e eu simplesmente não pode movê-la. Após a realização de outras acções que se deslocam outros mails são bloqueados e a que foi previamente bloqueada pode ser movido. A idéia é que depois de um mail está bloqueado será sempre pelo menos um e-mail que não pode ser movido. Em outras palavras aleatoriamente algumas das acções em movimento falhar. Eu tenho que dizer que eu não estou fazendo qualquer outra coisa do que mover mails a partir de uma pasta para outra e que eu recebo nenhuma mensagem de erro. Eu também tentei definir o parâmetro de manipuladores de eventos BeforeItemMove cancelar a falsa apenas no final dos métodos, mas eu tenho o mesmo comportamento.

Foi útil?

Solução

Você entendeu 76mel. Eu tive o mesmo problema (basta ligar uma pasta para o evento BeforeItemMove fez isso para que quando me mudei uma mensagem para fora da pasta, eu não conseguia movê-lo a partir da nova pasta para outra pasta por uma pequena quantidade de tempo) .

Adicionando Marshal.ReleaseComObject () para o final do manipulador de eventos fixa-lo perfeitamente.

Outras dicas

Se entendi sua descrição do problema acima,

O evento está disparando se mover o item da caixa de entrada para a pasta de spam, mas isso não funciona se você mover o mesmo item de volta. ?? como você tem que ligar o evento para alls pasta que você vai passar de.

que pode estar acontecendo é que você pode ter que soltar o objeto em seu manipulador de eventos Marshal.ReleaseComObject ()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top