如何捕获OutlookContact.Write事件?

时间:2011-11-03 14:35:29

标签: c# vsto outlook-2007

我正在尝试使用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 个答案:

答案 0 :(得分:1)

您需要使用其他事件。根据{{​​3}} - 项目的内容尚未加载到内存中。您应该查看Application.Inspectors事件this post