首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Items.Restrict返回重复项

Items.Restrict返回重复项
EN

Stack Overflow用户
提问于 2020-05-12 08:26:57
回答 1查看 66关注 0票数 1

在使用Items.Restrict时,我注意到它多次返回包含每个项的一组项:

代码语言:javascript
复制
MAPIFolder sentFolder = _nameSpace.GetDefaultFolder(OlDefaultFolders.olFolderSentMail);
DateTime sentDate = DateTime.Now.AddDays(-14).Date;
var filter = $"[SentOn] >= '{sentDate:d}'";
Console.WriteLine($"Filter {filter}");
Items items = sentFolder.Items.Restrict(filter);
foreach (MailItem mailItem in items)
{
    Console.WriteLine($"'{mailItem.Subject}'/{mailItem.SentOn}");
}

产出例如:

代码语言:javascript
复制
Filter [SentOn] >= '28.04.2020'
'Test-Mail'/11.05.2020 10:09:05
'Test-Mail'/11.05.2020 10:09:05
... repeat about 10 times ...

上面的代码是在一个单独的线程中从WPF应用程序调用的。

我编写了一个完全相同的控制台应用程序:

代码语言:javascript
复制
var application = new Application();
var ns = application.GetNamespace("MAPI");
var folder = ns.GetDefaultFolder(OlDefaultFolders.olFolderSentMail);
var filter = "[SentOn] >= '28.04.2020'";
Console.WriteLine($"Filter " + filter);
Items items = folder.Items.Restrict(filter);
foreach (MailItem item in items)
{
    Console.WriteLine($"'{item.Subject}'/{item.SentOn}");
}

输出(在同一台机器上执行):

代码语言:javascript
复制
Filter [SentOn] >= '28.04.2020'
'Test-Mail'/11.05.2020 10:09:05
'Test-Mail 2'/11.05.2020 11:05:34

我遗漏了什么?为什么前面提到的代码会返回重复的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-12 13:38:16

上面的代码是在一个单独的线程中从WPF应用程序调用的。

Outlook使用单线程公寓模型。所有调用都应该由Outlook封送到主线程,即使您试图使用它。因此,您不应该在辅助线程上使用Outlook对象模型。相反,您可以考虑使用基于扩展MAPI构建Outlook的低级别API,该API允许运行多线程应用程序。或者,只需使用任何第三方包装围绕该API,如救赎。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61747048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档