Ich habe eine C # Windows Forms-Anwendung mit einer Fortschrittsanzeige. Ich möchte das basierend auf einem bestimmten Methodenstatus dynamisch voranbringen. Ich habe diese Methode in einer separaten Klasse und erstelle einen neuen Thread für diese Methode mit einem Delegaten, um den Status der Methode an den übergeordneten Thread zu übergeben.
Die gleiche Situation, die ich in einer WPF-Anwendung mit progressbar.Dispatcher
lösen kann, aber in einer Windows Forms-Anwendung gibt es keinen Dispatcher, auch wenn ich den System.Threading
-Namespace verwende.
progressbar.Dispatcher
scheint nur in einer WPF-Anwendung verfügbar zu sein.
In Winforms können Sie ProgressBar.Invoke oder ProgressBar.BeginInvoke verwenden, um das Steuerelement von einem anderen Thread zu aktualisieren.
In der Windows Form-Anwendung sollte BackgroundWorker
perfekt für Ihre Aufgabe passen. Insbesondere hat sie ReportProgress
method, um den Fortschritt abhängig von Ihren Berechnungen zu senden und ProgressChanged
, um Änderungen vom UI-Thread zu verfolgen. Weitere Informationen finden Sie im MSDN-Artikel
In WinForms befinden sich die Methoden Invoke/BeginInvoke
direkt auf den Steuerobjekten, wie Sie in den Dokumenten von System.Windows.Forms.Control . So hätten Sie zum Beispiel progressBar.BeginInvoke(...)
.
Tags und Links c# multithreading dispatcher windows-applications