Das Problem tritt auf:
Wenn WinForm den Multithread-Zugriff auf die Steuerelemente des Hauptthreads verarbeitet, geschieht Folgendes erscheint: Fehlerdialog angezeigt:
Lösung:
Lösung 1: Entfernen Sie die Sicherheitsprüfung für den Thread-Zugriff auf Haupt-Thread-UI-Steuerelemente, verwenden Sie :
Control.CheckForIllegalCrossThreadCalls = false;
Option 2: Verwenden Sie die Delegation, um den UI-Steuerungsvorgang des Hauptthreads in die Nachrichtenwarteschlange des Threads zu verschieben Methoden sind: Invoke-Methode und BeginInvoke-Methode. Die erstere ist eine synchrone Methode und die letztere ist eine asynchrone Methode. Der Programmcode, der die synchrone Invoke-Methode verwendet, ist wie folgt und hat den Test bestanden: 🎜>
Hinweis: Der Prozess der Verwendung der asynchronen BeginInvoke-Methode ist der gleiche wie der der synchronen Invoke-Methode. Ersetzen Sie einfach die Invoke-Methode durch die BeginInvoke-Methode Synchronisationskontext: SynchronizationContext-Methode: Diese Methode dient dazu, die Kontextinformationen des Hauptthreads abzurufen und dann die Zugriffs-UI-Steuerungsmethode mithilfe von POST oder Send in die Nachrichtenwarteschlange des UI-Kontexts im untergeordneten Thread zu verschieben Option 4: Es gibt eineBackgroundWorker-Klasse im
-Namespace:System.ComponentModel. Sie wird in einem separaten Thread ausgeführt. Die folgende Abbildung wurde aus der offiziellen Website-Beschreibung kopiert:
Frageerweiterung:Warum ein TextBox-Steuerelement in WinForm hinzufügen und dann über einen anderen Thread auf das Steuerelement des UI-Hauptthreads zugreifen, ohne einen Fehler zu melden und normal weiterzuleiten? ? ? Bitte geben Sie mir einen Rat von den Experten! ! ! Das Bild sieht wie folgt aus:
Das obige ist der detaillierte Inhalt vonDetaillierte grafische und textliche Erläuterung der Thread-übergreifenden Zugriffskontrolle von C# WinForm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!