首頁 > 後端開發 > C++ > 如何在 C# 中從後台執行緒安全地更新 GUI?

如何在 C# 中從後台執行緒安全地更新 GUI?

Mary-Kate Olsen
發布: 2025-01-10 09:32:41
原創
926 人瀏覽過

How to Safely Update a GUI from a Background Thread in C#?

C# GUI 執行緒安全性更新指南

問題描述

從後台執行緒更新GUI是一個棘手的問題。直接嘗試這樣做可能會導致異常或意外行為。

BackgroundWorker解決方案

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板