Outlook VSTO не запускается на событии NewMailEx? - PullRequest
2 голосов
/ 14 октября 2008

Я создал VSTO в C #, который должен перехватывать событие Outlook 2007 NewMailEx. Однако иногда он не срабатывает, когда я выполняю отправку / получение вручную или когда в папке «Входящие» только 1 непрочитанное письмо. Похоже, что он срабатывает во входящей почте ДО того, как сообщение действительно прибудет.

Есть ли лучший способ мониторинга новых сообщений каждый раз помимо ItemAdd или NewMailEX с использованием VSTO?

1 Ответ

3 голосов
/ 15 октября 2008

Причина: «GC собирает объект .NET, который оборачивает COM-объект из Outlook)». Решением является ссылка на этот объект .NET. Самый простой способ:

// 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 );
}

Вы также можете иметь специальное поле для этой (и других) конкретной кнопки (или других объектов), если хотите. Но это наиболее распространенное решение.

...