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中文網其他相關文章!