かなり長い時間を要するアクションを実行する必要がある場合、このようなBackgroundWorkerで呼び出すため、UIはフリーズしません。バックグラウンドワーカーを使用してUIを更新する
BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.DoWork += (s, e) => {
//Do something long lasting
for(int i = 0; i < x; i++){
//Performing action i of x
//While doing so update the progressbar
prgBar.Dispatcher.Invoke(() =>{
prgBar.Value += ((i/x) * 100.0);
});
}
};
bgWorker.RunWorkerCompleted += (s, e) => {
//Finish up things
};
bgWorker.RunWorkerAsync();
これはUIを更新するための「行く方法」ですか、「されていません」ですか? BackgroundWorkerにも同じ質問が適用されます(BackgroundWorkerの代わりに新しいスレッドを開始することは可能でしょうか)。
:だから、単にその後、プログレスバー、フォーム上のコントロールとを持つことができます方法。 –