gpt4 book ai didi

c# - Outlook VSTO 加载项 C# 事件 - 一段时间后不再触发事件

转载 作者:行者123 更新时间:2023-12-05 05:15:21 25 4
gpt4 key购买 nike

目前我正在开发一个小型 VSTO Outlook 加载项。虽然我有一些 C# 经验,但我对 Outlook 对象模型不是很熟悉。

我的插件的范围非常简单。我和我的同事有一个共享的 Outlook 收件箱(除了我们自己的)。共享收件箱包含同名的类别和子文件夹。例如。有一个子文件夹“Michael”,并且存在一个类别“Michael”。当有人将自己的类别应用于共享收件箱中的邮件时,邮件会自动移动到匹配的子文件夹,回复窗口打开,发件人地址从共享电子邮件地址更改为个人地址(我们的 IT 调整了共享邮件地址无法发送电子邮件)。

现在,当前版本的插件运行完美,除了它会在一段时间后以某种方式停止运行。因此,当我启动 Outlook 时,一切都按预期进行,我可以对共享收件箱中的邮件进行分类并移动它们等。但是一段时间后(有时是几个小时,有时甚至是 30 分钟后)它就不再工作了。 Visual Studio 和 Outlook 中的调试 View 均未指示任何错误。起初我以为是什么东西终止了我的加载项,但后来我配置了一个计时器来向日志文件发送一条“我还活着”的消息,现在我可以看到加载项仍在运行。

因此我假设我注册的事件不知何故不足以跟踪用户在 Outlook 中的操作。当出现此行为并对邮件进行分类时,可以确认事件处理程序中的断点未被触发。我在启动方法中注册了以下事件:

Outlook.Application application = this.Application;
Outlook.Inspectors inspectors = application.Inspectors;
Outlook.Explorer activeExplorer = this.Application.ActiveExplorer();
// When a new mail is created, trigger Inspectors_AddTextToNewMail() methode
inspectors.NewInspector = new Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_AddTextToNewMail);
// Whenever something in the explorer is selected, run the event handler
activeExplorer.SelectionChange += ActiveExplorer_SelectionChange;

在 selectionChange() 事件处理程序中注册了另一个用于更改邮件属性的事件监听器:

Outlook.MailItem mailItem = selectedItem as Outlook.MailItem;
// Register an Event handler that listens for changes of the mailitem's properties in order to check the category
mailItem.PropertyChange += MailItem_PropertyChange;

这样我可以检查一个类别是否已被应用。

但过了一段时间后,甚至没有触发 ActiveExplorer_SelectionChange 事件,这与我在 Outlook 中选择的内容无关。

有人知道我是否遗漏了什么吗?我是否必须注册才能参加更多事件,这样插件才不会丢失?

提前感谢您的帮助!

最好的问候,

珀西

最佳答案

您需要在全局(类)级别声明变量applicationinspectorsactiveExplorer,以防止它们被释放垃圾收集器。

关于c# - Outlook VSTO 加载项 C# 事件 - 一段时间后不再触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51593628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com