C# Outlook加载项AppointItem PropertyChange事件触发过多

C# Outlook加载项AppointItem PropertyChange事件触发过多,c#,outlook-addin,C#,Outlook Addin,我正在创建一个Outlook加载项,当会议的与会者发生更改时需要触发该加载项。 我遇到的问题是,约会项目的PropertyChange事件太频繁,因此我无法获得确切的与会者人数 以下是我正在使用的一些代码: private Outlook.AppointmentItem appointmentItem; private void Inspectors_NewInspector(Outlook.Inspector inspector) { var item = inspec

我正在创建一个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名与会者,并且你删除了一名,那么“测试”将是4-3-2-1

有没有办法计算一个预约项目的确切出席人数

任何帮助都将不胜感激。

当父对象的显式内置属性发生更改时,将触发该事件。确保在inspector窗口关闭或打开新inspector窗口时取消订阅事件。是这样吗

本文讨论了一种实现检查器包装器的技术。检查器包装器处理Microsoft Outlook检查器窗口的多个实例

您可能还会发现Items类的事件很有帮助。当指定集合中的项发生更改时,将触发该事件。

当父对象的显式内置属性发生更改时,将触发该事件。确保在inspector窗口关闭或打开新inspector窗口时取消订阅事件。是这样吗

本文讨论了一种实现检查器包装器的技术。检查器包装器处理Microsoft Outlook检查器窗口的多个实例

您可能还会发现Items类的事件很有帮助。当指定集合中的某个项目发生更改时,将触发该事件。

ItemChange(“RequiredAttendes”)
将针对所需、可选或资源与会者的任何更改触发该事件,对此您无能为力

我很幸运使用了计时器-当ItemChange事件触发时,启用计时器(您可以将其间隔设置为100毫秒)。当计时器事件触发时,禁用计时器(这样它就不会再次触发)。并处理收件人集合。届时,所有更改都将得到处理,您将只处理一次与会者

由于您使用的是.Net,请使用表单命名空间中的计时器类(它在主线程上工作),而不是系统命名空间(它使用后台线程,这在COM加载项中使用Outlook对象时是一种不好的做法)。

ItemChange(“RequiredAttenders”)
将针对所需的可选,或者资源与会者,你对此无能为力

我很幸运使用了计时器-当ItemChange事件触发时,启用计时器(您可以将其间隔设置为100毫秒)。当计时器事件触发时,禁用计时器(这样它就不会再次触发)。并处理收件人集合。届时,所有更改都将得到处理,您将只处理一次与会者

由于您使用的是.Net,因此请使用表单命名空间中的计时器类(它在主线程上工作),而不是系统命名空间(它使用后台线程,在COM加载项中处理Outlook对象时,这是一种不好的做法)