Zugriff auf ein Formular-Steuerelement aus einem separaten thread
Ich bin Praktizierender auf dem Durchzug und stieß auf dieses problem. Die situation ist wie folgt:
-
Ich habe 4 Balken auf einer einzigen form, einer für das herunterladen der Datei, einen für die Seite angezeigt lade-status etc...
-
Ich habe die Kontrolle über den Fortschritt der einzelnen ProgressBar von einem separaten thread aus.
Das problem ist, ich bin immer ein InvalidOperationException was sagt
Cross-thread operation not valid: Control 'progressBar1' zugegriffen
einem anderen thread als dem thread der es erstellt wurde.
Bin ich falsch in diesem Ansatz oder kann mir jemand sagen, wie man diese umsetzen?
- Check out dieser Artikel von Jon Skeet auf threading in Windows Forms. Es sollte sich aufklären. Eine kurze Erklärung wäre, dass Sie benötigen zum aufrufen des UI-Elemente aus Ihren anderen threads, da die UI läuft auf einem eigenen thread.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die UI-Elemente können nur zugegriffen werden, indem der UI-thread. WinForms-und WPF - /Silverlight nicht ermöglichen Zugriff auf Bedienelemente, die von mehreren threads.
Eine Umgehung dieser Einschränkung finden Sie hier.
Einen
Control
kann nur zugegriffen werden, die innerhalb der thread, der es erstellt - UI-thread.Müssten Sie etwas wie:
Die invoke-Methode führt den angegebenen Delegaten, die auf dem UI-thread.
Können Sie die Kontrolle.InvokeRequired - flag und verwenden Sie dann die Kontrolle.Aufrufen Methode, wenn nötig. Kontrolle.Aufrufen nimmt einen Delegaten, so dass Sie können verwenden Sie die integrierte Aktion<T>.
Vielleicht wird dies funktionieren.
Müssen Sie rufen Sie die Methode Aufrufen, die von nicht-UI-threads, um einige Aktionen auf form-und sonstige Kontrollen.