VSTO Outlook Plugin - SelectionChangeEventHandler срабатывает только при запуске - PullRequest
0 голосов
/ 21 января 2019

Я планирую извлекать почтовый элемент из выбранной электронной почты при каждой возможности для выбранной электронной почты Outlook, но дескриптор события срабатывает только при запуске, а иногда и корректно. Я не могу найти причину проблемы, большинство форумов ведет в тупик, отсюда и этот пост.

В любом случае, вот фрагмент моего Способ запуска :

private void Main_Startup(object sender, System.EventArgs e)
    {

        this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);

        Outlook.Explorer currentExplorer = this.Application.ActiveExplorer();
        currentExplorer.SelectionChange += new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(CurrentExplorer_Event);

        outlookNameSpace = this.Application.GetNamespace("MAPI");
        inbox = outlookNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
        items = inbox.Items;
        items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);

    }

и вот фрагмент моего CurrentExplorer_Event метода:

private void CurrentExplorer_Event()
    {
        newSelectedEmail = new Email();
        Outlook.MAPIFolder selectedFolder = this.Application.ActiveExplorer().CurrentFolder;
        try
        {
            if (this.Application.ActiveExplorer().Selection.Count > 0)
            {
                Object selObject = this.Application.ActiveExplorer().Selection[1];
                if (selObject is Outlook.MailItem)
                {
                    Outlook.MailItem mailItem = (selObject as Outlook.MailItem);
                    GetEmailInfoFromOutlookEmail(mailItem);
                }

            }
        }
        catch (Exception ex)
        {
            Operations.SaveLogToFile(LogType.Error, "Main - CurrentExplorer_Event", ex.Message, ex.StackTrace);
        }
    }

Любая помощь очень ценится. Спасибо!

1 Ответ

0 голосов
/ 21 января 2019

Переменная, вызывающая события (currentExplorer), является локальной переменной. Как только он выходит из области видимости, он становится правомочным для сборщика мусора. Как только это происходит, события не генерируются.

Переместить объявление этой переменной на уровень класса.

...