是否可以使用在整个应用程序中共享的全局同步上下文?

Is it possible to use global Synchronization context shared across the whole application?

我使用 Outlook 加载项应用程序。看起来 Outlook 对象没有同步上下文,等待完成后没有 return 调用线程。我想知道是否可以创建一个新的全局同步上下文并将其用于加载项应用程序中的所有等待命令?如果是,我该怎么做?我应该在 await 调用之前将其设置为执行上下文 属性 吗?或者,有更好的解决方案吗?

谢谢。

您可以使用 Namespace.SyncObjects 集合和 SyncObject.SyncStart / SyncEnd 事件。

Outlook 对象模型使用单线程单元模型,不提供任何开箱即用的同步上下文。此外,SynchronizationContext class 属于 .net 框架的 BCL,而不是 Outlook。

I wonder if it is possible to create a new global Synchronization context and use it for all await commands in the add-in app?

是的,如果线程没有 没有它自己的 SynchronizationContext 与之关联的实例。 运行 线程可以通过调用静态 SynchronizationContext.SetSynchronizationContext 方法与同步上下文相关联。稍后您可以使用 SynchronizationContext.Current 属性.

获取 运行 线程的当前上下文

If yes, how can I do this? Should I set it as Execution context property before await call?

如果没有与当前线程(主线程)关联的同步上下文,您可以执行一次。通常 Windows 表单会在创建第一个表单的线程上安装 WindowsFormsSynchronizationContext 的实例。 (此线程通常称为 "the UI thread"。)此同步上下文恰好在该线程上调用传递给它的委托。