如何在搜索文档时使用wpf中的进度条(圆形)

本文关键字:圆形 wpf 搜索 文档 | 更新日期: 2023-09-27 17:58:45

我想使用进度条,这样当我通过全文搜索某些文档时,用户应该看到它正在进行中。假设我有5万份文件。我想使用全文搜索来查找包含"建筑施工"一词的文档。目前运行良好。但当我搜索时,我必须等待5-15秒。我想在此搜索期间使用负载平衡。有可能吗?我应该如何使用它?使用多线程还是其他什么?我怎么能理解第一个线程是否完成了工作?请给我一些清晰的想法和代码。

如何在搜索文档时使用wpf中的进度条(圆形)

假设您在这里谈论的是等待光标,还是指窗口中的进度条?对于等待光标,您需要在窗口中或在您想要的任何元素上使用它光标出现在上

<Window.Style>
    <Style TargetType="{x:Type Window}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsBusy}" Value="True">
                <Setter Property="Cursor" Value="Wait" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Style>

然后可以通过在ViewModel上将IsBusy属性更改为true来激活它,或者如果您不执行MVVM ,则可以在代码隐藏中激活它

为了解决您文章的其余部分,您是否正在寻找一种方法,将您的sql调用推送给工作者,这样它就不会锁定UI?

假设这是你想要的,这里是

public class SearchViewModel : INotifyPropertyChanged
{
    public bool IsBusy
    {
        get { return _isBusy; }
        set
        {
            _isBusy = value;
            RaisePropertyChanged("IsBusy");
        }
    }
    public void Search(string searchPhrase)
    {
        IsBusy = true;
        Task.Factory
            .StartNew(p =>
            {
                // This is where you do your database thing and return your results
            }, searchPhrase)
            .ContinueWith(t =>
            {
                // And this is where you use the returned results in t.Result
                // don't forget to check for errors :)
                IsBusy = false;
            }, TaskScheduler.FromCurrentSynchronizationContext());
    }
}

或者如果您更喜欢异步方法

public class SearchViewModel : INotifyPropertyChanged
{
    public async Task Search(string searchPhrase)
    {
        IsBusy = true;
        var results = await DoDatabaseSearch(searchPhrase);
        // do stuff with results
        IsBusy = false;
    }
    public async Task<IEnumerable<SearchResult>> DoDatabaseSearch(string searchPhrase)
    {
        // This is where you would do your search
    }
}