2011-12-19 13 views
5

Tengo un problema al adjuntar un controlador de eventos a un evento ItemAdd de una carpeta pública.Evento ItemAdd en una carpeta pública en Exchange

El problema es que el controlador de eventos deja de llamar después de unas pocas llamadas exitosas .

El código es trivial. Tengo una clase ThisAddIn que crea un objeto que a su vez asocia una función al evento ItemAdd en su constructor. La función simplemente aparece un cuadro de mensaje.

Por favor, apúnteme en la dirección correcta. Simplemente no entiendo dónde buscar el error.

gracias de antemano, Anatoly

Aquí está el código de prueba trato de ejecutar:

public partial class ThisAddIn 
{ 
    internal static Outlook.Folder posts_folder = null; 
    private static test t; 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 

     t = new test(); 
    } 
{ 

class test 
{ 
    public test() 
    { 
     System.Windows.Forms.MessageBox.Show("Attaching..."); 
     ThisAddIn.posts_folder.Items.ItemAdd +=new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 
    } 
    void Items_ItemAdd(object Item) 
    { 
     System.Windows.Forms.MessageBox.Show((Item as Outlook.PostItem).Subject); 
    } 
} 
+0

puede publicar su fragmento de código ... ¿cómo está declarando el controlador de eventos ... está utilizando algo como EventHandlerVar + = new someeventHandler o + - someEventHandler está utilizando un delegado, un callcback.? es difícil de decir sin ver lo que tienes hasta ahora, gracias – MethodMan

Respuesta

3

googlear continua hizo su trabajo. Encontré cómo resolver el problema. Parece que no soy el único que lo experimenta.

que añade la referencia a la colección de elementos de la carpeta que quiero hacer un seguimiento al ámbito mundial:

internal static class stor 
{ 
    public static Outlook.Items i; 
} 

public partial class ThisAddIn 
{ 
    internal static Outlook.Folder posts_folder = null; 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     // the code for finding a posts_folder is omitted 

     stor.i = posts_folder.Items; 
     stor.i.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Posts_Add); 
    } 

    static void Posts_Add(object Item) 
    { 
     System.Windows.Forms.MessageBox.Show("New item"); 
    } 
{ 

Ahora funciona como se esperaba. Aunque no entiendo todos los detalles, dicen que es un problema de recolección de basura. Mi controlador de eventos finalmente fue arrojado a la basura. La referencia a la colección Elementos en el ámbito global impide que esto suceda.

+0

Impresionante, estaba sentado aquí buscando exactamente esto ... – keynesiancross

Cuestiones relacionadas