3
我试图用钩事件Application.ItemLoad的方法:如何捕获OutlookContact.Write事件?
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:该项目的属性和 方法不能在此事件过程中使用。
我该怎么做,我没有得到上述错误?
感谢您阅读我长期以来的问题,并期待您的建议。
感谢您的回复。使用NewInspector事件执行Application_ItemLoad步骤的问题在于,PropertyChangeHandler与ContactItem.Write事件挂钩了多次。我们可以确保它只钩住一次吗? – craftsman
检查器关闭后,应该断开处理程序。使用'((Outlook.InspectorEvents_10_Event)inspector).Close + = new Outlook.InspectorEvents_10_CloseEventHandler(Inpsector_Close);' – SliverNinja
我应该在哪里放这段代码?如果我将它插入到NewInspector事件处理程序中,则CloseEventHandler将再次与一个检查程序连接多次。另外,Inspector_Close回调方法没有任何参数。即使我将这个方法与Close事件挂钩,我将如何获得对当前检查器或项目的引用,该事件的Write事件需要断开处理程序? – craftsman