Pregunta

Estoy escribiendo un complemento de Outlook 2007. Todo lo que estoy haciendo es:

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

Y el problema es que, incluso si no escribo nada en los métodos BeforeItemMoveFromInbox y BeforeItemMoveFromSpam, la aplicación tiene un comportamiento extraño. Después de mover algunos correos, simplemente no realiza más acciones de movimiento para un correo en particular. Parece que un correo está bloqueado y no puedo moverlo. Después de realizar otras acciones de movimiento, se bloquean otros correos y se puede mover el que estaba bloqueado previamente. La idea es que después de que se bloquee un correo, siempre habrá al menos un correo que no se puede mover. En otras palabras, al azar algunas de las acciones en movimiento fallan. Debo decir que no estoy haciendo nada más que mover los correos de una carpeta a otra y que no aparece ningún mensaje de error. También intenté establecer el parámetro de cancelación de los controladores de eventos BeforeItemMove en falso justo al final de los métodos, pero obtuve el mismo comportamiento.

¿Fue útil?

Solución

Lo tienes 76mel. Tuve el mismo problema (solo conectando una carpeta al evento BeforeItemMove lo hice para que cuando moviera un mensaje fuera de esa carpeta, no pudiera moverlo de la nueva carpeta a otra carpeta por un pequeño período de tiempo) .

Agregar Marshal.ReleaseComObject () al final del controlador de eventos lo solucionó perfectamente.

Otros consejos

Si entiendo la descripción del problema anterior,

El evento se está activando si mueve el elemento de la bandeja de entrada a la carpeta de correo no deseado, pero no funciona si mueve el mismo elemento hacia atrás. ?? ya que tiene que enlazar el evento para todas las carpetas desde las que se moverá.

lo que puede estar sucediendo es que es posible que tenga que liberar el Objeto en su controlador de eventos Marshal.ReleaseComObject ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top