C# GUI スレッド セーフティ アップデート ガイド
バックグラウンド スレッドから GUI を更新するのは難しい問題です。直接実行しようとすると、異常または予期しない動作が発生する可能性があります。
1. 初期設定: BackgroundWorker をインスタンス化し、そのイベント ハンドラーを構成します。
<code class="language-csharp">private BackgroundWorker _backgroundWorker; _backgroundWorker = new BackgroundWorker(); _backgroundWorker.DoWork += backgroundWorker_DoWork; _backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged; _backgroundWorker.WorkerReportsProgress = true;</code>
2. バックグラウンドタスク: DoWork イベント ハンドラーで、長時間実行されるタスクを実行し、定期的に進行状況を報告します。
<code class="language-csharp">public void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { // ... 执行你的任务 object param = "一些数据"; _backgroundWorker.ReportProgress(0, param); }</code>
3. 進捗報告: ProgressChanged イベント ハンドラーで、報告された進行状況で GUI を更新します。
<code class="language-csharp">private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { // 使用e.ProgressPercentage和e.UserState更新UI }</code>
4. バックグラウンド タスクを開始します: RunWorkerAsync を呼び出してバックグラウンド タスクを開始します。
<code class="language-csharp">_backgroundWorker.RunWorkerAsync();</code>
5. 継続的なスケジュール (オプション): タスクを定期的に繰り返す必要がある場合は、RunWorkerCompleted イベント ハンドラーに次のコードを追加できます。
<code class="language-csharp">void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // UI 更新 Thread.Sleep(10000); Update(); }</code>
以上がC# のバックグラウンド スレッドから GUI を安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。