Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VSTO Outlook多线程_C#_Multithreading_Task Parallel Library_Vsto_Outlook Addin - Fatal编程技术网

C# VSTO Outlook多线程

C# VSTO Outlook多线程,c#,multithreading,task-parallel-library,vsto,outlook-addin,C#,Multithreading,Task Parallel Library,Vsto,Outlook Addin,我正在为Outlook开发VSTO加载项,并使用.Net TPL/PFX库访问OOM 下面是一个片段: Parallel.ForEach(mailItem.Recipients.OfType<Outlook.Recipient>(), x => { try { Outlook.Recipient recipient = x as Outlook.Recipient; ... Paralle

我正在为Outlook开发VSTO加载项,并使用.Net TPL/PFX库访问OOM

下面是一个片段:

Parallel.ForEach(mailItem.Recipients.OfType<Outlook.Recipient>(), x =>                    
{
    try
    {
        Outlook.Recipient recipient = x as Outlook.Recipient;
        ...
Parallel.ForEach(mailItem.Recipients.OfType(),x=>
{
尝试
{
Outlook.Recipient=x作为Outlook.Recipient;
...
我在这里遇到了一些关于在STA中运行OOM的线程,因此想知道上面的内容是否有用,或者是否会降低性能。另外,在这样的代码中应该考虑什么类型的清理/释放


请任何VSTO Outlook专家对此发表意见?

Outlook使用单线程单元模型,因此您应该仅在主线程上处理它。如果最新的Outlook版本检测到跨线程调用,您可能会因此类操作而出现异常。我建议从主线程上的OOM收集所需信息(UI)线程,然后使用辅助线程进行处理,例如,如果需要进行一些web调用


您也可以考虑使用Outlook基于扩展MAPI的低级API。它允许在二次线程上使用该API。例如,您可以考虑使用扩展MAPI之上的第三方库并支持它在多线程环境中使用,最著名的是赎回。这与UI操作无关。我只是想弄清楚是否有人知道在多线程环境中访问OOM是可取的,或者它是否会导致任何其他问题。谢谢!它适用于整个对象模型,而不仅仅是UI。Chris,那么你的答案是什么?你是说做上述操作会导致问题吗?