Outlook Addin appointmentitem PropertyChange事件解雇太多了

时间:2015-06-18 09:18:29

标签: c# outlook-addin

我正在创建一个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中确切的与会者人数?

非常感谢任何帮助。

2 个答案:

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