在单独的线程中运行Outlook Addin

时间:2014-05-26 13:27:21

标签: multithreading outlook add-in

我正在开发Outlook Addin 2010.当单击任务窗格上的按钮时,它会从服务器检索数据并显示在Datagrid中。但是花了2分钟的时间来获取数据,并且在此期间前景冻结了。

有人可以帮助我在单独的线程中运行数据检索过程吗?用户可以在检索时使用outlook。

1 个答案:

答案 0 :(得分:0)

请记住,Outlook对象模型不能用于主Outlook线程以外的线程。虽然它有时可能在Outlook 2010或更早版本中有效,但只要Outlook 2013检测到从辅助线程访问它就会引发异常。

第一个问题是为什么你的代码需要那么久?您是否必须一次检索所有数据?你能用大块吗?你的代码是什么?如何优化?

如果辅助线程是您唯一的选择,则需要使用扩展MAPI(仅限C ++或Delphi)或Redemption(任何语言) - 其RDO family of objects是线程安全的。对于Outlook插件,可以将Outlook中的Namespace.MAPIOBJECT值存储在变量中,然后在辅助线程上创建RDOSession对象的实例,并将其MAPIOBJECT属性设置为从Outlook的Namespace.MAPIOBJECT中检索的值。

相关问题