Update der ProgressBar in einem anderen Fenster aus eine Funktion?
Ich habe einen Background-Task, der eine Datei hochlädt, und ich möchte es zu berichten, den Fortschritt auf einer progressbar auf eine andere form. Wie würde ich gehen? Ich bin etwas neu in C# aber lange Zeit VB .net-Programmierer.
Ich Durcheinander mit diesen code, aber seine völlig falsch.
System.Windows.Forms.Form progForm = new ProgressWindows();
Control[] ctrls = progForm.Controls.Find("fileProgress1", true);
- Winform-app? Wollen Sie zeigen den genauen Prozentsatz? Sie haben keine Möglichkeit zu wissen, der Prozentsatz? Möchten Sie verwenden, BacgroundWorker? Sorry für die vielen Fragen 🙂
- Ich tatsächlich tun. Seine MS VSTO Outlook-plugin. Aber während der Fortschritt der übertragung, ich benutze percentageComplete = (int)(totalReadCount / (double)fileSize * 100); und ich bekomme eine einfache 1 zu 100 Fortschritt. Ich habe getestet dies durch die messagebox.
InformationsquelleAutor Dan C. | 2011-09-04
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr problem ist nur der Zugriff auf die fileProgress1. Die einfachste Lösung ist, machen es der öffentlichkeit in der ProgressWindow Klasse. Standardmäßig sind Steuerelemente private.
Dann können Sie den Zugriff auf die fileProgress1 Steuerung, wie unten beschrieben.
Jedoch der bessere Weg ist setzen Sie eine öffentliche Methode in der PrefressWindows Klasse, die updates der Fortschritte.
In der ProgressWindows Klasse
Aufruf der oben beschriebenen Methode als unten.
Wenn Sie einen BackgroundWorker dann rufen Sie ReportProgress. Andernfalls müssen Sie bis zum Versand der Benutzeroberfläche ändern zu dem richtigen thread. In WinForms sehen die Kontrolle.InvokeRequired Eigentum und Verwandte Methoden. Die WPF-äquivalent ist DispatcherObject.VerifyAccess.
Edit: Visual Studio ist nicht vor mir, so kann es einige geringfügige Fehler bei der Kompilierung.
FindControl
Durchlauf der Fortschrittsanzeige-Steuerelement, um dieTask
's Konstruktor, oder übergeben Sie eine Methode, die Zugriff hat.Gehe ich davon aus, dass Ihre zweite form (die, die Sie wollen, um zu zeigen, Fortschritte in) instanziiert wird in form der "Aufgabe". Warum nicht erstellen Sie einfach eine öffentliche Methode in der zweiten form, nimmt einen integer-parameter zu aktualisieren, den Fortschritt-bar-Wert? Scheint wie eine relativ einfache Lösung.