2017-02-08 13 views
1

Visual Studio 2015 Перспективы 2016 годаПерспективы плагин для замены текста в сообщениях электронной почты

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

я могу подписаться на событие ItemLoad:

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(OnItemLoad); 
    } 

    private void OnItemLoad(object item) 
    { 
     Outlook.MailItem mailItem = item as Outlook.MailItem; 

     if (mailItem != null) 
     { 
      System.Diagnostics.Debug.WriteLine("OnItemLoad: " + mailItem.Subject); 
     } 
    } 

Но когда он уволен по какой-то причине, я ничего не могу получить доступ к экземпляру Outlook.MailItem. Я получаю следующее исключение:

Исключения типа «System.Runtime.InteropServices.COMException» произошло в FirstOutlookAddIn.dll, но не был обработан в коде

Дополнительной информации пользователя: свойства элемента и методах не может быть , используемый внутри этой процедуры события.

Заранее благодарен!

ответ

2

Это сообщение об ошибке очень недвусмысленно: никакие свойства или методы OOM не доступны в некоторых обработчиках событий.

Обходное решение должно состоять в том, чтобы ждать, пока вы не закончите обработчик событий - либо используйте другое событие (если оно доступно), либо включите таймер в обработчике событий OOM, затем в обработчике событий таймера выполните то, что вам нужно do (к тому моменту, когда он срабатывает), вы не будете работать с обработчиком событий OOM. Используйте класс Timer из пространства имен Forms, когда он запускается в основном потоке.

Имейте в виду, что изменить существующие элементы не рекомендуется - возможно, изменения будут сохранены (также обновление последней измененной даты) или что Outlook предложит пользователю сохранить изменения.

Попробуйте работать с редактором Word, открытым через Inspector.GetWordEditor. Для области чтения вы можете использовать объект ReadingPane в Redemption.

+1

Немного странно, что вы получили объект, переданный обработчику событий, который вы не можете использовать, хотя, я думаю, вы можете хранить ссылку и использовать ее позже. Кажется немного неуклюжим, но это сработало. Спасибо, куча человека! – Dylan