2015-06-18 35 views
0

我創建了一個Outlook插件,當會議的與會者發生更改時需要觸發。 我遇到的問題是,約會項目的PropertyChange事件觸發方式太多,因此我無法獲得確切數量的與會者。展望加載項appointmentitem PropertyChange事件發射太多

下面是一些我使用的代碼:

private Outlook.AppointmentItem appointmentItem; 
private void Inspectors_NewInspector(Outlook.Inspector inspector) 
    { 
     var item = inspector.CurrentItem as Outlook.AppointmentItem; 
     if (item != null) 
     { 
      appointmentItem = item; 
      temp = inspector; 
      visible = false; 
      appointmentItem.PropertyChange += AppOnPropertyChange; 
     } 
    } 

private void AppOnPropertyChange(string name) 
    { 

     if (name.Equals("RequiredAttendees")) 
     { 
      var test = appointmentItem.Recipients.Count; 
     } 
    } 

該事件被觸發的方式太多次,因而「測試」將在1之間得到的值(發件人始終是一個與會者)和參加者人數。 此外,如果你有3個與會者,並刪除一個,「測試」將是4 - 3 - 2 - 1.

有沒有辦法找出一個AppointmentItem中的出席者的確切人數?

任何幫助將不勝感激。

回答

3

ItemChange("RequiredAttendees")將觸發所需的,可選的或資源出席者的任何更改,但您無所事事。

我有運氣使用計時器 - 當ItemChange事件觸發時,啓用計時器(您可以將其間隔設置爲100毫秒)。當定時器事件觸發時,禁用定時器(所以它不會再次觸發)。並處理收件人收藏。屆時所有更改都將被處理,您只會處理一次與會者。

由於您使用的是.Net,因此您可以使用Forms命名空間中的Timer類(它在主線程上運行)而不是System命名空間(它使用後臺線程,這是在Outlook對象一個COM插件)。

+0

計時器爲我做了詭計。謝謝你的提示 :-) –

1

當父對象的顯式內置屬性發生更改時,會觸發PropertyChange事件。確保在檢查器窗口關閉或您打開新的檢查器窗口時取消訂閱事件。是這樣嗎?

Developing an Inspector Wrapper for Outlook 2010討論了一種實現檢查器包裝的技術。檢查器包裝處理Microsoft Outlook檢查器窗口的多個實例。

您還可能會發現Items類的ItemChange事件有幫助。當指定集合中的項目發生更改時會觸發它。