Outlook 插件 appointmentitem PropertyChange 事件触发太多
Outlook Addin appointmentitem PropertyChange event firing too much
我正在创建一个 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;
}
}
事件被触发的次数太多,因此 "test" 将得到介于 1(发件人始终是与会者)和与会者人数之间的值。
此外,如果您有 3 名与会者,而您删除了一名,则 "test" 将是 4 - 3 - 2 - 1。
有没有办法计算出 AppointmentItem 中参加者的确切人数?
如有任何帮助,我们将不胜感激。
当父对象的显式内置 属性 发生更改时,将触发 PropertyChange 事件。确保在关闭检查器 window 或打开新检查器 window 时取消订阅事件。是这样吗?
Developing an Inspector Wrapper for Outlook 2010 讨论了一种实现检查器包装器的技术。检查器包装器处理 Microsoft Outlook 检查器的多个实例 windows。
您可能还会发现项目 class 的 ItemChange 事件很有帮助。当指定集合中的项目更改时触发。
ItemChange("RequiredAttendees")
将针对必需、可选或资源参与者的任何更改触发,您对此无能为力。
我很幸运地使用了计时器 - 当 ItemChange 事件触发时,启用计时器(您可以将其间隔设置为 100 毫秒)。当计时器事件触发时,禁用计时器(这样它就不会再次触发)。并处理收件人集合。届时所有更改都将得到处理,您只需处理一次与会者。
由于您使用的是 .Net,因此请使用 Forms 命名空间(它在主线程上运行)中的计时器 class 而不是系统命名空间(它使用后台线程,这是一种不好的做法在 COM 加载项中使用 Outlook 对象)。
我正在创建一个 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;
}
}
事件被触发的次数太多,因此 "test" 将得到介于 1(发件人始终是与会者)和与会者人数之间的值。 此外,如果您有 3 名与会者,而您删除了一名,则 "test" 将是 4 - 3 - 2 - 1。
有没有办法计算出 AppointmentItem 中参加者的确切人数?
如有任何帮助,我们将不胜感激。
当父对象的显式内置 属性 发生更改时,将触发 PropertyChange 事件。确保在关闭检查器 window 或打开新检查器 window 时取消订阅事件。是这样吗?
Developing an Inspector Wrapper for Outlook 2010 讨论了一种实现检查器包装器的技术。检查器包装器处理 Microsoft Outlook 检查器的多个实例 windows。
您可能还会发现项目 class 的 ItemChange 事件很有帮助。当指定集合中的项目更改时触发。
ItemChange("RequiredAttendees")
将针对必需、可选或资源参与者的任何更改触发,您对此无能为力。
我很幸运地使用了计时器 - 当 ItemChange 事件触发时,启用计时器(您可以将其间隔设置为 100 毫秒)。当计时器事件触发时,禁用计时器(这样它就不会再次触发)。并处理收件人集合。届时所有更改都将得到处理,您只需处理一次与会者。
由于您使用的是 .Net,因此请使用 Forms 命名空间(它在主线程上运行)中的计时器 class 而不是系统命名空间(它使用后台线程,这是一种不好的做法在 COM 加载项中使用 Outlook 对象)。