2015-06-18 33 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事件有帮助。当指定集合中的项目发生更改时会触发它。