【发布时间】:2015-02-25 22:17:35
【问题描述】:
我有一个带有一些按钮的 RibbonBar 出现在 Outlook 资源管理器中(双击邮件)。
在后台编辑邮件附件的一些进展。如果用户关闭资源管理器,outlook 将要求保存已编辑的邮件(保存更改)。
是否有一个事件来处理这个?如果我的程序更改了邮件,我不希望出现该消息。
我没有成功搜索事件。但也许我只是错过了什么。
【问题讨论】:
我有一个带有一些按钮的 RibbonBar 出现在 Outlook 资源管理器中(双击邮件)。
在后台编辑邮件附件的一些进展。如果用户关闭资源管理器,outlook 将要求保存已编辑的邮件(保存更改)。
是否有一个事件来处理这个?如果我的程序更改了邮件,我不希望出现该消息。
我没有成功搜索事件。但也许我只是错过了什么。
【问题讨论】:
没有必要为此处理任何事件。
如果用户关闭资源管理器,outlook 将要求保存编辑的邮件(保存更改)。
这是一个很好的指标,表明更改未保存或 Outlook 对象(实际上是底层 COM 对象)未正确释放。使用完后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject 释放 Outlook 对象。然后在 Visual Basic 中将变量设置为 Nothing(在 C# 中为 null)以释放对对象的引用。您可以在 MSDN 的 Systematically Releasing Objects 文章中阅读更多相关信息。
在后台编辑邮件附件的一些进度。
不要从辅助线程使用 Outlook 对象模型。 Office 应用程序(在您的情况下为 Outlook)使用单线程单元模型。您可以在主线程上收集所需的信息(例如将其保存在字符串中)并在另一个线程上处理它。或者您可以使用允许运行多个线程的低级 API(扩展 MAPI)。您也可以考虑使用围绕该 API 的任何包装器。坦率地说,Outlook 是该 API 的一个大包装。
【讨论】: