¿Outlook VSTO no se activa en el evento NewMailEx?
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?
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.