Outlook加载项:使用线程
我正在处理Outlook Addin,我必须处理大量项目。这需要相当多的时间,因此我尝试在不同的线程中运行处理(使用Task.Factory.StartNew)。然而,这会导致Outlook随机崩溃 我正在使用Redemption处理MAPITable,以减少工作量并仅加载相关数据Outlook加载项:使用线程,outlook,vsto,outlook-addin,outlook-redemption,Outlook,Vsto,Outlook Addin,Outlook Redemption,我正在处理Outlook Addin,我必须处理大量项目。这需要相当多的时间,因此我尝试在不同的线程中运行处理(使用Task.Factory.StartNew)。然而,这会导致Outlook随机崩溃 我正在使用Redemption处理MAPITable,以减少工作量并仅加载相关数据 我已尝试从主线程和工作线程初始化RDOSession 我已尝试在主线程上获取MAPIFolders,并仅在工作线程上使用MAPITable 目前,对我来说唯一有效的方法是在主线程上运行我的所有逻辑(在按钮单击事件
- 我已尝试从主线程和工作线程初始化RDOSession
- 我已尝试在主线程上获取MAPIFolders,并仅在工作线程上使用MAPITable
是否有人对如何在Outlook插件中使用后台线程有一些指导意见?在辅助线程中使用RDO对象有什么问题?只要在辅助线程上创建了RDOSession,MAPI就应该正确初始化
另外,TaskFactory使用线程池,您最好使用显式线程类,o至少确保不同线程之间不共享RDOSession-每个线程上都必须初始化MAPI。在我的项目中有类似的代码,我建议如下:
下面是一个示例非工作代码,它会导致Outlook崩溃:尝试使用{}定义RDOSession变量的作用域并调用GC.Collect();在所有RDO对象都超出范围之后。