C# 如何捕获OutlookContact.Write事件?
我正在尝试用Application.ItemLoad事件钩住一个方法: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); } 这将检查当前项目
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工作得很好。