Heim > Backend-Entwicklung > C++ > Wie aktualisiere ich eine GUI sicher aus einem Hintergrundthread in C#?

Wie aktualisiere ich eine GUI sicher aus einem Hintergrundthread in C#?

Mary-Kate Olsen
Freigeben: 2025-01-10 09:32:41
Original
927 Leute haben es durchsucht

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

C# GUI Thread Safety Update Guide

Problembeschreibung

Das Aktualisieren der GUI über einen Hintergrundthread ist ein heikles Problem. Der Versuch, dies direkt zu tun, kann zu ungewöhnlichem oder unerwartetem Verhalten führen.

BackgroundWorker-Lösung

1. Ersteinrichtung: Instanziieren Sie einen BackgroundWorker und konfigurieren Sie seine Ereignishandler.

<code class="language-csharp">private BackgroundWorker _backgroundWorker;

_backgroundWorker = new BackgroundWorker();
_backgroundWorker.DoWork += backgroundWorker_DoWork;
_backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
_backgroundWorker.WorkerReportsProgress = true;</code>
Nach dem Login kopieren

2. Hintergrundaufgaben: Führen Sie im DoWork-Ereignishandler lang andauernde Aufgaben aus und melden Sie regelmäßig den Fortschritt.

<code class="language-csharp">public void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    // ... 执行你的任务
    object param = "一些数据";
    _backgroundWorker.ReportProgress(0, param);
}</code>
Nach dem Login kopieren

3. Fortschrittsbericht: Aktualisieren Sie im ProgressChanged-Ereignishandler die GUI mit dem gemeldeten Fortschritt.

<code class="language-csharp">private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    // 使用e.ProgressPercentage和e.UserState更新UI
}</code>
Nach dem Login kopieren

Aufgabe läuft

4. Hintergrundaufgabe starten: Rufen Sie RunWorkerAsync auf, um die Hintergrundaufgabe zu starten.

<code class="language-csharp">_backgroundWorker.RunWorkerAsync();</code>
Nach dem Login kopieren

5. Kontinuierliche Planung (optional): Wenn Sie die Aufgabe regelmäßig wiederholen müssen, können Sie den folgenden Code im RunWorkerCompleted-Ereignishandler hinzufügen.

<code class="language-csharp">void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // UI 更新
    Thread.Sleep(10000);
    Update();
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine GUI sicher aus einem Hintergrundthread in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage