Как перехватить событие OutlookContact.Write? - PullRequest
3 голосов
/ 03 ноября 2011

Я пытаюсь подключить метод к событию Application.ItemLoad:

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

Что будет проверять, является ли текущий элемент ContactItem. Если это ContactItem, он будет проверять, содержит ли свойство ContactItem.User4 значение xxx. Если ContactItem.User4 содержит значение xxx, он перехватит другой метод с событием ContactItem.Write:

void Application_ItemLoad(object Item)
        {
            if (Item is Outlook.ContactItem)
            {
                Outlook.ContactItem contact = (Outlook.ContactItem)Item;
                System.Windows.Forms.MessageBox.Show("A new contact is loaded into memory");

                try
                {
                    string user4 = contact.User4;
                    bool isSynchronized =  user4 != null && user4.Contains("xxx");

                    if (isSynchronized)
                    {
                        contact.Write += propertyChangeHandler;
                    }
                }
                catch (Exception e)
                {
                    System.Windows.Forms.MessageBox.Show("An error occurred: "+e);
                }
            }
        }

Теперь проблема в том, что всякий раз, когда я пытаюсь получить доступ к свойству ContactItem.User4, я получаю исключение:

System.Runtime.InteropServices.COMException: свойства элемента и методы нельзя использовать внутри этой процедуры события.

Что мне делать, чтобы я не получил вышеуказанную ошибку?

Спасибо, что прочитали мой длинный вопрос и с нетерпением ждем ваших предложений.

1 Ответ

1 голос
/ 03 ноября 2011

Вам нужно использовать другое событие.Согласно этому посту - содержимое предмета еще не загружено в память.Вы должны посмотреть на Application.Inspectors событие NewInspector.

...