gpt4 book ai didi

Wpf 工具包 AutoCompleteBox 在后台线程上搜索

转载 作者:行者123 更新时间:2023-12-04 06:11:07 27 4
gpt4 key购买 nike

我正在使用 WPF 工具包 AutoCompleteBox,它的 itemsSource 是一个包含数百万个对象的列表。
AutoCompleteBox 是否用于搜索后台线程,如果没有,我该如何实现。

最佳答案

不,它不使用后台线程。您可以在 WPF Tookit 中自己阅读源代码.但是,它足够灵活,可以让您在后台线程上自行完成。

您可以使用这种方法:

  • 处理Populating事件:取消它,然后使用 SearchText 启动你的后台工作进程
  • 当后台工作完成时:设置 ItemsSource并调用 PopulateComplete

  • MSDN文档中有一个完整的例子:
  • AutoCompleteBox.Populating Event

  • 该示例使用异步 Web 服务来填充自动完成数据,但同样的想法也适用于搜索非常大的数据集。后台线程

    更新:

    这是一个在后台线程上进行搜索的完整示例。它包括一秒钟的 sleep 来模拟长时间的搜索:
    private class PopulateInfo
    {
    public AutoCompleteBox AutoCompleteBox { get; set; }
    public string SearchText { get; set; }
    public IEnumerable<string> Results { get; set; }
    }

    private void AutoCompleteBox_Populating(object sender, PopulatingEventArgs e)
    {
    var populateInfo = new PopulateInfo
    {
    AutoCompleteBox = sender as AutoCompleteBox,
    SearchText = (sender as AutoCompleteBox).SearchText,
    };
    e.Cancel = true;
    var ui = TaskScheduler.FromCurrentSynchronizationContext();
    var populate = Task.Factory.StartNew<PopulateInfo>(() => Populate(populateInfo));
    populate.ContinueWith(task => OnPopulateComplete(task.Result), ui);
    }

    private PopulateInfo Populate(PopulateInfo populateInfo)
    {
    var candidates = new string[] {
    "Abc",
    "Def",
    "Ghi",
    };
    populateInfo.Results = candidates
    .Where(candidate => candidate.StartsWith(populateInfo.SearchText, StringComparison.InvariantCultureIgnoreCase))
    .ToList();
    Thread.Sleep(1000);
    return populateInfo;
    }

    private void OnPopulateComplete(PopulateInfo populateInfo)
    {
    if (populateInfo.SearchText == populateInfo.AutoCompleteBox.SearchText)
    {
    populateInfo.AutoCompleteBox.ItemsSource = populateInfo.Results;
    populateInfo.AutoCompleteBox.PopulateComplete();
    }
    }

    关于Wpf 工具包 AutoCompleteBox 在后台线程上搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567057/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com