我用它来访问子线程中的Outlook电子邮件:
try
Outlook := GetActiveOleObject('Outlook.Application') ;
except
Outlook := CreateOleObject('Outlook.Application') ;
end;
NameSpace := Outlook.GetNameSpace('MAPI');
Folder := NameSpace.Folders;
找到指定的文件夹后,我通过以下方式访问电子邮件:
var MailItem: Variant;
MailItem := Folder.Items[i];
然后我使用应用程序中的邮件列表来访问它们。
这适用于主线程或子线程本身。
但是当我将从子线程获得的MailItem
传递给主线程时,我得到了一个例外。
似乎Folder.Items
返回一个严格分配给子线程的指针,并且不能从主线程访问。
如何获取一长串不阻止主线程的电子邮件?我想要比Application.ProcessMessages;
答案 0 :(得分:1)
您的代码在哪里运行?它是一个独立的exe或COM插件吗?请记住,只要Outlook 2013检测到对象正在使用其主线程以外的线程(如果是COM插件),就会引发异常。在独立的exe的情况下,无论如何所有调用都被封送到主Outlook线程,所以你没有通过使用辅助线程获得任何东西。
您可以使用扩展MAPI或MAPI包装器(例如Redemption - 其RDO对象系列是线程安全的。)