C# GUI Thread Safety Update Guide
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.
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>
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>
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>
4. Hintergrundaufgabe starten: Rufen Sie RunWorkerAsync auf, um die Hintergrundaufgabe zu starten.
<code class="language-csharp">_backgroundWorker.RunWorkerAsync();</code>
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>
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!