我正在创建一个Outlook插件,需要在会议的与会者更改时触发。 我遇到的问题是,约会项目的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个与会者说你删除一个,那么“test”将是4 - 3 - 2 - 1。
有没有办法找出AppointmentItem中确切的与会者人数?
非常感谢任何帮助。
答案 0 :(得分:3)
ItemChange("RequiredAttendees")
将触发所需,可选或资源与会者的任何更改,您无需做任何事情。
我很幸运使用了计时器 - 当ItemChange事件触发时,启用计时器(您可以将其间隔设置为100毫秒)。当计时器事件触发时,禁用计时器(因此它不会再次触发)。并处理收件人集合。到那时,所有更改都将被处理,您只需处理一次与会者。
由于您使用的是.Net,请使用Forms命名空间中的Timer类(它在主线程上工作)而不是System命名空间(它使用后台线程,这在使用Outlook对象时是一种不好的做法。 COM插件)。
答案 1 :(得分:1)
当父对象的显式内置属性发生更改时,将触发PropertyChange事件。确保在检查器窗口关闭或打开新检查器窗口时取消订阅事件。是这样的吗?
Developing an Inspector Wrapper for Outlook 2010讨论了实现检查器包装器的技术。检查器包装器处理多个Microsoft Outlook检查器窗口实例。
您可能还会发现Items类的ItemChange事件很有帮助。当指定集合中的项目发生更改时会触发它。