我在C#中有一个例程,通过过滤Contact文件夹来搜索Outlook中的联系人,当我逐步调试它时它会起作用,但是如果我让它单独运行(没有调试中断)那么它就什么都不做了, Outlook返回的结果只是空数组,没有例外,没有。这是例程:
private List<Outlook.ContactItem> filterContactFolder(String searchStr, Outlook.Folder folder)
{
List<Outlook.ContactItem> contacts = new List<Outlook.ContactItem>();
string filter = "urn:schemas:contacts:fileas LIKE '%" + searchStr + "%'";
Outlook.Search searchObject = null;
String scope = String.Empty;
try
{
scope = "'" + folder.FolderPath + "'";
searchObject = Globals.ThisAddIn.Application.AdvancedSearch(scope, filter, false, Type.Missing);
foreach (Outlook.ContactItem c in searchObject.Results)
{
contacts.Add(c);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
finally
{
if (searchObject != null) searchObject.ReleaseComObject();
}
return contacts;
}
任何人都知道发生了什么事?
答案 0 :(得分:1)
你试图过早地得到结果。
关键的事实是搜索是在另一个线程中执行的。您需要处理在AdvancedSearch方法完成时触发的Application类的AdvancedSearchComplete事件。
您可能会发现Advanced search in Outlook programmatically: C#, VB.NET文章有用。