我有一个加载项,由于Outlook禁用了缓慢的加载项,因此在启动过程中需要运行一些耗时的代码,如何避免这种情况。是否有我可以回应的事件,我们不将其计入Outlook的缓慢添加计算中?还是利用线程是唯一的方法?有点担心线程如果使用不当可能会与Outlook交互不良。
答案 0 :(得分:1)
在启动时不执行任何操作-最简单的解决方法是创建一个Timer对象(使用Forms命名空间中的Timer对象,而不是System中的-您希望计时器在主线程上触发)并运行代码当计时器事件触发时。在事件触发时,您将退出Outlook监视的启动回调,因此它将永远不会知道。当然,仍然会阻止用户,因此这只能是临时的创可贴。
您仍然可以在插件中使用线程,只需要确保不触摸辅助线程上的OOM即可。如果您的耗时代码不需要任何Outlook对象,则可以轻松地将其移至辅助线程。否则,扩展MAPI(仅C ++或Dephi)或Redemption(包装扩展MAPI并可以从任何语言使用)都是您唯一的选择。如果是赎回,则可以将Namespace.MAPIOBJECT属性的值保存在变量中,然后在辅助线程上创建RDOSession对象的新实例(它大致对应于OOM中的Namespace对象)并进行设置将其MAPIOBJECT属性更改为保存在主线程上的值。