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