Zugriff auf das Steuerelement eines Formulars über einen separaten Thread

8

Ich übe auf Threading und stieß auf dieses Problem. Die Situation ist so:

  1. Ich habe 4 Fortschrittsbalken in einem einzigen Formular, einen zum Herunterladen einer Datei, einen zum Anzeigen des Ladezustands der Seite usw. ...

  2. Ich muss den Fortschritt jeder ProgressBar über einen separaten Thread steuern.

Das Problem ist, dass ich eine InvalidOperationException bekomme, in der

steht
  

Cross-thread-Operation nicht gültig: Steuerung 'progressBar1', auf die von zugegriffen wird   ein anderer Thread als der Thread, auf dem er erstellt wurde.

Habe ich einen falschen Ansatz oder kann mir jemand sagen, wie ich das umsetzen soll?

    
Chandra Eskay 30.09.2011, 11:42
quelle

5 Antworten

9

Auf die UI-Elemente kann nur vom UI-Thread zugegriffen werden. WinForms und WPF / Silverlight erlauben keinen Zugriff auf Steuerelemente aus mehreren Threads.

Ein Workaround für diese Einschränkung finden Sie hier .

    
Dennis Traub 30.09.2011, 11:44
quelle
31

Auf ein Control kann nur innerhalb des Threads zugegriffen werden, der es erstellt hat - den UI-Thread.

Sie müssten etwas tun wie:

%Vor%

Die invoke-Methode führt dann den angegebenen Delegaten im UI-Thread aus.

    
ebb 30.09.2011 12:01
quelle
9

Sie können das Control.InvokeRequired -Flag überprüfen und Verwenden Sie dann gegebenenfalls die Methode Control.Invoke . Control.Invoke verwendet einen Delegaten, damit Sie die integrierte Aktion & lt; T & gt;.

verwenden können %Vor%     
Peter Kelly 30.09.2011 11:59
quelle
6
%Vor%

Vielleicht wird das funktionieren.

    
Rovo93 05.08.2016 08:01
quelle
2

Sie müssen die Methode Invoke von Nicht-UI-Threads aufrufen, um einige Aktionen für das Formular und andere Steuerelemente auszuführen.

    
Vasya 30.09.2011 11:45
quelle

Tags und Links