我使用Outlook加载项应用。看起来Outlook对象没有Synchronization上下文,await在完成后不返回调用线程。我想知道是否有可能创建一个新的全局同步上下文并将其用于加载项应用程序中的所有等待命令?如果是,我该怎么做?我应该在等待调用之前将其设置为执行上下文属性吗?或者,有一个更好的解决方案吗?
谢谢。
答案 0 :(得分:1)
Outlook对象模型使用单线程单元模型,并且不提供任何开箱即用的同步上下文。而且,SynchronizationContext
类属于.net框架中的BCL,而不是Outlook。
我想知道是否可以创建新的全局同步上下文并将其用于加载项应用程序中的所有等待命令?
是的,如果线程没有自己的SynchronizationContext
实例与之关联。通过调用静态SynchronizationContext.SetSynchronizationContext方法,可以将正在运行的线程与同步上下文相关联。稍后,您可以使用SynchronizationContext.Current
属性获取正在运行的线程的当前上下文。
如果是,我该怎么做?我应该在等待调用之前将其设置为执行上下文属性吗?
如果没有与当前线程(main)关联的同步上下文,则可以执行一次。通常,Windows窗体将在创建第一个表单的线程上安装WindowsFormsSynchronizationContext
的实例。 (此线程通常称为" UI线程"。)此同步上下文调用在该线程上传递给它的委托。
答案 1 :(得分:0)
您可以使用Namespace.SyncObjects
个收集和SyncObject.SyncStart
/ SyncEnd
个活动。