c# - El controlador de eventos no se agrega a los nuevos elementos de correo
event-handling add-in (1)
Intento crear un complemento sencillo de Outlook 2010 que responda a los nuevos eventos adjuntos. El siguiente código solo funciona cuando elimino el comentario de la línea MessageBox.Show. Pero con esto eliminado, parece no agregar el controlador de eventos. ¿Qué me estoy perdiendo sobre el flujo del programa que significa que un cuadro de mensaje modal afecta la ubicación de los manejadores de eventos?
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.Inspectors.NewInspector += Inspectors_NewInspector;
}
void Inspectors_NewInspector(Outlook.Inspector Inspector)
{
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
mailItem.BeforeAttachmentAdd += mailItem_BeforeAttachmentAdd;
//System.Windows.Forms.MessageBox.Show("Twice");
}
}
}
void mailItem_BeforeAttachmentAdd(Outlook.Attachment Attachment, ref bool Cancel)
{
Cancel = true;
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
El objeto COM que plantea los eventos debe estar vivo. En su caso, está utilizando la notación de puntos múltiples y el compilador crea una variable implícita; una vez que esa variable es recogida de basura, dejará de disparar eventos. Lo mismo para los elementos de correo: deberá atrapar al inspector. Cerrar el evento y eliminar los elementos de la lista _mailItems;
public partial class ThisAddIn
{
private Inspectors _inspectors;
private List<MailItem> _mailItems = new List<MailItem>();
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_inspectors = Application.Inspectors;
_inspectors.NewInspector += Inspectors_NewInspector;
}
void Inspectors_NewInspector(Outlook.Inspector Inspector)
{
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
_mailItems.Add(mailItem):
mailItem.BeforeAttachmentAdd += mailItem_BeforeAttachmentAdd;
//System.Windows.Forms.MessageBox.Show("Twice");
}
}
}
void mailItem_BeforeAttachmentAdd(Outlook.Attachment Attachment, ref bool Cancel)
{
Cancel = true;
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}