背景:
BackgroundWorker
クラスは、UI の応答性を維持しながら、長時間実行されるタスクをバックグラウンドで実行するために使用されるコンポーネントです。これにより、UI を更新したり、UI スレッドで実行する必要があるその他の操作を実行したりできます。
質問:
ユーザーは、長時間実行されるタスクの実行中に進行状況バーを更新するために BackgroundWorker
を実装しようとしています。ただし、進行状況バーのアニメーションは、DoWork
スレッドが完了するまで開始されません。ユーザーは別の BackgroundWorker
を使用して進行状況バーを更新しようとしましたが、最初の BackgroundWorker
の DoWork
スレッドが完了するまではまだ機能しませんでした。
答え:
BackgroundWorker
を正しく使用して進行状況バーを更新するには、次のものが必要です:
BackgroundWorker
の WorkerReportsProgress
プロパティが true
に設定されていること、および進行状況バーを更新するために ProgressChanged
イベント ハンドラーが実装されていることを確認してください。 BackgroundWorker
の DoWork
イベント ハンドラーで、適切な間隔で ReportProgress
メソッドを呼び出して、タスクの現在の進行状況を報告します。これにより、ProgressChanged
イベントがトリガーされ、UI スレッドの進行状況バーが更新されます。 ProgressChanged
イベントは UI スレッドで発生するため、UI 要素はこのイベント ハンドラーから直接更新できます。ここで、進行状況バーの Value
属性を更新して、報告された進行状況を反映できます。 コード例:
これは、BackgroundWorker
を使用して進行状況バーを更新する方法を示す簡単なコード例です。
<code class="language-csharp">// 用户控件代码隐藏 private void DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i <= 100; i++) { // 模拟长时间运行的工作 Thread.Sleep(100); backgroundWorker.ReportProgress(i); } } private void ProgressChanged(object sender, ProgressChangedEventArgs e) { // 当调用 ReportProgress 方法时,这会在 UI 线程上调用 progressBar.Value = e.ProgressPercentage; }</code>
以上がBackgroundWorker を使用して ProgressBar を継続的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。