プログレス バーを使用したい - 全文検索でいくつかのドキュメントを検索している間、ユーザーはプログレス バーが進行中であることを確認する必要があります。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 または MVVM を実行していない場合はコード ビハインドで IsBusy プロパティを true に変更することでアクティブ化できます。
投稿の残りの部分に取り組むために、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 に答える