Multithreading VSTO Outlook加载项,是否需要从主线程执行UI操作?

Multithreading VSTO Outlook加载项,是否需要从主线程执行UI操作?,multithreading,outlook,ms-office,vsto,add-in,Multithreading,Outlook,Ms Office,Vsto,Add In,我正在为Outlook维护一个VSTO加载项,它有一个BackgroundWorker来处理与服务器的同步。我希望工作者在UI中触发用户错误(更改按钮上的图片,在设置窗口中启用消息) UI操作是否需要从初始线程开始 说不是,但a这么说。它适用于Excel,但仍然适用于VSTO加载项。我试过了,但它似乎可以从任何一个线程运行,但可能存在一个我还没有达到的竞争条件。是的,所有Outlook/Office对象模型访问都必须从主线程完成。见我完全同意德米特里的观点。办公应用程序使用单线程公寓。您应该仅在

我正在为Outlook维护一个VSTO加载项,它有一个BackgroundWorker来处理与服务器的同步。我希望工作者在UI中触发用户错误(更改按钮上的图片,在设置窗口中启用消息)

UI操作是否需要从初始线程开始


说不是,但a这么说。它适用于Excel,但仍然适用于VSTO加载项。我试过了,但它似乎可以从任何一个线程运行,但可能存在一个我还没有达到的竞争条件。

是的,所有Outlook/Office对象模型访问都必须从主线程完成。见

我完全同意德米特里的观点。办公应用程序使用单线程公寓。您应该仅在主线程上访问对象模型。如果需要进行后台处理,可以从Outlook对象中提取所需信息,并运行辅助线程来处理辅助线程上的数据。或者您可以使用低级API-扩展MAPI(或该API周围的任何其他第三方包装)。

仅澄清一下,这也适用于UI?我认为UI与对象模型是分开的。我的worker在本地数据库和服务器之间同步,它不直接从Outlook访问数据。是的,尤其是在UI上。