2008-10-14 3 views
2

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

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

ответ

3

Причина: «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); 
} 

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

Смежные вопросы