【发布时间】:2018-07-13 04:57:25
【问题描述】:
我正在编写需要将某些项目保存为 msg 文件的 VSTO Outlook 加载项。问题是,每次我调用 MailItem.SaveAs 时,它都会导致 Outlook 稍微滞后并显示处理光标(蓝色圆圈)。 我已经尝试将它移动到一个单独的线程中,但这并没有帮助。 保存项目非常快(大部分时间不到 100 毫秒),但仍然会导致这种烦人的行为。 我需要保存一个项目以将其读取为 MSG 格式,所以如果我可以直接执行此操作会更好,但正如我在这里找到的: Outlook MailItem as Stream 唯一的解决方案似乎为此使用 EWS。还有其他选择吗?
也许在这种情况下使用 RDO 会有所帮助? 据我了解,另一种选择是从邮件项目属性手动创建 msg。但也许有更简单的方法?
【问题讨论】:
-
您尝试过使用 RDO 吗?它可以在辅助线程上使用。
-
是的,我正在考虑。会试一试的。
-
从 Outlook MailItem 创建 Redemption SafeMailItem 并保存它似乎有帮助。但我有一些问题。在使用项目集创建 SafeMailItem 之后为项目调用 Marshal.ReleaseComObject 是否安全?它是否包含任何引用或只是复制数据?保存的消息与我从 Outlook 获得的消息略有不同。例如,对于主题为空的消息,它会在主题中显示 [UNREGISTERED]。
-
是的,Marshal.ReleaseComObject 是安全的 - 它只是确保立即释放 COIM 对象,而不是稍后在 GC 线程上释放。[UNREGISTERED] 由开发版本添加 - 它不存在于可分发版本。
标签: outlook vsto mapi outlook-redemption