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

C# Outlook VSTO加载项C事件-一段时间后不再触发事件,c#,events,outlook,outlook-addin,C#,Events,Outlook,Outlook Addin,目前,我正在开发一个小型VSTO Outlook加载项。虽然我有一些C语言的经验,但我对Outlook对象模型不是很熟悉 我的外接程序的范围非常简单。我的同事和我在自己的收件箱旁边有一个共享的Outlook收件箱。共享收件箱具有同名的类别和子文件夹。例如,有一个子文件夹“Michael”,有一个类别“Michael”。当某人将自己的类别应用于共享收件箱中的邮件时,邮件会自动移动到匹配的子文件夹中,回复窗口将打开,发件人地址将从共享电子邮件地址更改为个人电子邮件地址。我们的IT将共享邮件地址调整为

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

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

目前,外接程序的当前版本可以完美地工作,除了它在一段时间后不知何故停止工作之外。因此,当我启动outlook时,一切正常,我可以在共享收件箱中对邮件进行分类,邮件会被移动,等等。但过了一段时间,有时几个小时,有时甚至30分钟,它就不再工作了。Visual Studio和Outlook中的调试视图均未指示任何错误。起初我以为有什么东西终止了我的外接程序,但后来我配置了一个计时器,向日志文件发送一条“我还活着”消息,现在我可以看到外接程序仍在运行

因此,我假设我注册的事件不足以跟踪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\u SelectionChange事件都不会被触发,这与我在Outlook中选择的内容无关

有人知道我是否错过了什么吗?我是否必须注册到其他事件,以便加载项不会丢失跟踪

提前谢谢你的帮助

致以最良好的祝愿


Percy

您需要在全局类级别声明变量application、inspector和activeExplorer,以防止垃圾收集器释放它们

什么时候有多长时间?我有一个几乎一模一样的东西,可以运行几个月。。直到windows坚持我重新启动。很有可能是有什么东西在默默地作怪。。确保您有足够的检查和日志今早我注意到30分钟后加载项停止工作。昨天它一直工作到一天结束,没有任何问题。同时,我添加了许多调试信息控制台和日志文件。当外接程序停止工作时,不会生成新条目。只有由我在启动方法中初始化的计时器创建的I'm alive日志条目仍然生成。您是否认为对整个代码进行全局异常处理可能表明存在问题?不幸的是,问题在于您的代码中的某个地方,加载项仍然存在,它只是消失了,吃着自己的尾巴做着一些事情,而它是只有您才能真正解决的事情-例如,我的监视器监视新邮件,这取决于邮件,如果有必要,制作一个目录并保存邮件,如果这一切都需要太长时间,它可能会呕吐,所以我不得不做一些有趣的事情,让它认为这是做了,当它没有,但它仍在做等待等。感谢回复,我会尝试这一点,并观察这是否解决了问题这似乎是解决它!!!非常感谢,我不相信垃圾收集器会决定抓取这些对象。我会再观察几天,但到目前为止,它没有一次失去反应