c# - Evento ItemAdd en una carpeta pública en Exchange
event-handling outlook-addin (1)
Tengo un problema al adjuntar un controlador de eventos a un evento ItemAdd
de una carpeta pública.
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 ItemAdd
una función al evento ItemAdd
en su constructor. La función simplemente aparece un cuadro de mensaje.
Por favor, apúntame en la dirección correcta. Simplemente no entiendo dónde buscar el error.
Gracias de antemano, Anatoly
Aquí está el código de prueba que intento 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);
}
}
Google continuo hizo su trabajo. Encontré cómo resolver el problema. Parece que no soy el único que lo experimenta.
Agregué la referencia a la colección Items de la carpeta que quiero rastrear al alcance global:
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.