Я пытаюсь подключиться к событию ItemSend (который должен срабатывать, когда пользователь нажимает «Отправить» в Outlook), но проблема у меня есть, если GC запускается перед пользователем клики «Отправить», кейс события потерян. Я проверил это, вызывая gc.Collect. Я использую Outlook 2007 с последним пакетом обновления. Сначала я думал, что проблема связана с областью видимости, но я все это убрал и все еще не могу определить, почему мой крюк событий удаляется. Может кто-нибудь пролить некоторый свет на это? большое спасибо.Interop Outlook 2007 потеряет событие ItemSend после коллекции Garbage
справочный проект: Microsoft.Office.Interop.Outlook
using System.Windows.Forms;
using Microsoft.Office.Interop.Outlook;
namespace WindowsFormsApplication20
{
public partial class Form1 : Form
{
private Microsoft.Office.Interop.Outlook.Application outlook;
private MailItem mailItem;
public Form1()
{
InitializeComponent();
outlook = new Microsoft.Office.Interop.Outlook.Application();
outlook.Application.ItemSend += ThisApplication_SentMail;
mailItem = (MailItem)outlook.CreateItem(OlItemType.olMailItem);
mailItem.Recipients.Add("[email protected]");
mailItem.Body = "test123";
mailItem.Display();
// when gc collect, ItemSend event no longer fires (force gc.collect to test)
System.GC.Collect();
}
private void ThisApplication_SentMail(object item, ref bool cancel)
{
int halt = 0; //breakpoint here
}
}
}
Спасибо Dmitry –
Да - спасибо. Все работало в модульных тестах и в течение первых 90 секунд или около того, что мое приложение запускалось, - тогда оно прекратилось. –