Pregunta

He creado un VSTO en C # que se supone que engancha el evento NewMailEx de Outlook 2007. Sin embargo, a veces no se dispara cuando hago un envío / recepción manual, o cuando solo hay 1 correo no leído en la bandeja de entrada. Casi parece que se dispara en la bandeja de entrada ANTES de que llegue el mensaje.

¿Existe una mejor manera de monitorear los nuevos mensajes cada vez además de ItemAdd o NewMailEX usando VSTO?

¿Fue útil?

Solución

El motivo es: " GC recopila el objeto .NET, el cual contiene el objeto COM de Outlook) " La solución es mantener la referencia a este objeto .NET. La forma más fácil es:

// this is helper collection.
// there are all wrapper objects
// , which should not be collected by GC
private List<object> holdedObjects = new List<object>();

// hooks necesary events
void HookEvents() {
    // finds button in commandbars
    CommandBarButton btnSomeButton = FindCommandBarButton( "MyButton ");
    // hooks "Click" event
    btnSomeButton.Click += btnSomeButton_Click;
    // add "btnSomeButton" object to collection and
    // and prevent themfrom collecting by GC
    holdedObjects.Add( btnSomeButton );
}

También puede tener un campo especial para este (y otros) botón concreto (u otro objeto), si lo desea. Pero esta es la solución más común.

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