Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何捕获OutlookContact.Write事件?_C#_Vsto_Outlook 2007 - Fatal编程技术网

C# 如何捕获OutlookContact.Write事件?

C# 如何捕获OutlookContact.Write事件?,c#,vsto,outlook-2007,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); } 这将检查当前项目

我正在尝试用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钩住另一个方法。写入事件:

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:项的属性和 方法不能在此事件过程中使用

我应该怎么做才能不出现上述错误


感谢您阅读我的长问题,并期待您的建议。

您需要使用不同的活动。根据-项的内容尚未加载到内存中。您应该查看
应用程序.Inspectors
事件。

感谢您的回复。使用NewInspector事件执行应用程序\u ItemLoad步骤时出现的问题是propertyChangeHandler多次与ContactItem.Write事件挂钩。我们能保证它只钩住一次吗?你应该在检查器关闭后断开处理器。使用
((Outlook.InspectorEvents\u 10\u事件)检查器).Close+=新建Outlook.InspectorEvents\u 10\u CloseEventHandler(Inpsector\u Close)我应该把代码放在哪里?如果我将其插入NewInspector事件处理程序,CloseEventHandler将再次与一个检查器连接多次。此外,Inspector\u Close回调方法没有任何参数。即使我将此方法与Close事件挂钩,我如何获得当前inspector或item的引用,我需要从其写入事件断开处理程序的连接?@Craftman您需要实现inspector包装器@SilverNinja非常感谢您的建议。InspectorWrapper工作得很好。