Outlook C# VSTO 加载项事件触发次数过多

Outlook C# VSTO Add-In events fired too many times

我正在为 Outlook 2013 编写一个加载项。我们公司的电子邮件通常以 note.04 之类的对话项目数结尾。如果用户必须回复这些消息之一,他或她必须手动增加数字。我想使这个过程自动化。

我正在使用 2 个事件来实现此目的:ExplorerEvents_10_SelectionChangeEventHandlerItemEvents_10_ReplyEventHandler。问题是这些事件不止一次被触发。第一个在 Outlook 启动时触发了 3 次,第二个在我单击 "Reply" 按钮后触发了 2 次。结果是,当消息包含 note.04 并且我单击回复时,数字增加了太多次,例如note.07.

如何确保此事件只发生一次?

首先,引发事件的对象必须在 global/class 级别上保持活动状态 - 否则垃圾收集器将释放它们并且不会触发任何事件。

其次,为什么选择电子邮件的次数很重要?你关心的是回复事件。除非您在同一项目上设置多个事件接收器,否则它只会触发一次。

在 class 级别保留所选消息 (List<MailItem>) 的列表,每次触发选择事件时,通过解除事件处理程序的挂钩并使用 [=11 释放那里的所有对象来清除列表=] 对于列表中的每一项,调用 List.Clear()。这样事件就不会触发您从集合中删除的项目(它们可能在 GC 释放它们之前仍然存在)。 然后将新选择的项目添加到列表中并设置回复事件处理程序。