【问题标题】:VSTO Outlook MultithreadingVSTO Outlook 多线程
【发布时间】:2017-11-15 16:48:55
【问题描述】:

我正在开发适用于 Outlook 的 VSTO 插件,并使用 .Net TPL/PFX 库来访问 OOM。

这是一个sn-p:

Parallel.ForEach(mailItem.Recipients.OfType<Outlook.Recipient>(), x =>                    
{
    try
    {
        Outlook.Recipient recipient = x as Outlook.Recipient;
        ...

我在这里遇到了一些讨论 OOM 在 STA 中运行的线程,所以想知道以上内容是否有用,或者无论如何会降低性能。另外,在这样的代码中应该考虑什么类型的 Cleanup/ComRelease?

请任何 VSTO Outlook 专家对此发表评论吗?

【问题讨论】:

  • 这与 UI 操作无关。我只是想弄清楚是否有人知道在多线程环境中访问 OOM 是可取的,或者它是否会导致任何其他问题。谢谢!
  • 它适用于整个对象模型,而不仅仅是 UI。
  • 克里斯,你的答案是什么?您是说执行上述操作会导致问题吗?

标签: c# multithreading task-parallel-library vsto outlook-addin


【解决方案1】:

Outlook 使用单线程单元模型,因此您应该只在主线程上处理它。如果最新的 Outlook 版本检测到跨线程调用,您可能会因为此类操作而获得异常。我建议在主 (UI) 线程上从 OOM 收集所需信息,然后使用辅助线程处理它,例如,如果您需要进行一些 Web 调用。

您还可以考虑使用 Outlook 所基于的低级 API - 扩展 MAPI。允许在辅助线程上使用该 API。例如,您可以考虑使用构建在 Extended MAPI 之上并支持在多线程环境中使用它的第三方库,最著名的是 Redemption。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2016-02-09
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2011-06-12
    • 2010-12-10
    相关资源
    最近更新 更多