Outlook - 搜索例程仅在调试模式下有效

时间:2015-02-28 16:10:02

标签: c# outlook add-in outlook-addin

我在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;
}

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

你试图过早地得到结果。

关键的事实是搜索是在另一个线程中执行的。您需要处理在AdvancedSearch方法完成时触发的Application类的AdvancedSearchComplete事件。

您可能会发现Advanced search in Outlook programmatically: C#, VB.NET文章有用。