我想使用进度条 - 所以当我通过全文搜索搜索一些文档时,用户应该看到它正在进行中。假设,我有 50 000 个文档。我想使用全文搜索查找包含“建筑施工”一词的文档。它现在工作正常。但是当我搜索时,我必须等待 5-15 秒。我想在这段搜索中使用负载均衡。可能吗?我应该如何使用它?使用多线程还是其他?我怎么知道第一个线程是否完成工作?请给我一些清晰的想法和代码。
问问题
1577 次
1 回答
1
假设您在这里谈论等待光标,还是您的意思是窗口中的进度条?对于等待光标,您需要在窗口中或希望光标出现的任何元素上使用它
<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
}
}
于 2013-02-11T00:58:27.010 回答