Sarene Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 Hallo!!! Ich habe einen Thread in VB.NET erstellt und darin will ich den Wert einer Progressbar erhöhen. Als einfache Methode konnte ich die Progessbar updaten…aber mit dem Thread klappt es nicht mehr ? Die Progessbar liegt auf einer Windowsform und wird so mit dem Designer erstellt Friend WithEvents pbrSENDMAIL As System.Windows.Forms.ProgressBar Wenn ich das Programm im Debugmodus durchlaufe, dann erhalte ich anstatt einen Wert den Hinweis : Reference to a non-shared member requires an object reference. Also dachte ich, ich müsste den modifier Friend in „Public Shared“ ändern. Der Hinweis ist nun weg…aber der Wert der Progressbar wird nach wie vor NICHT verändert… Ich hoffe ihr versteht mein Anliegen. Hat jemand schon mal so ein Problem gehabt und kann mir bei dieser Sache behilflich sein?? LG Sarene Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 BackgroundWorker Class (System.ComponentModel) BackgroundWorker.ReportProgress Method (Int32) (System.ComponentModel) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hahne Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 Hahne.NET : Progressbar im Backgroundworker ansprechen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sarene Geschrieben 9. Juni 2009 Autor Teilen Geschrieben 9. Juni 2009 Ok...danke!! ich habe jetzt eine Progressbar und einen Backgroundworker auf meiner WindowsForm ... der Backgroundworker wird so augerufen backgroundWorker.RunWorkerAsync() und die dafür notwendige Funktion Private Sub backgroundWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles backgroundSerienmail.DoWork For i = 0 to x 'Anweisung System.Threading.Thread.Sleep(1000) backgroundWorker.ReportProgress((i / x) * 100)) next i End Sub anschließend wird im Designer folgende Methode angelegt... Private Sub backgroundWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles backgroundWorker.ProgressChanged Me.progressbar.Value = e.ProgressPercentage End Sub So..der Funktionsaufruf findet statt...allerdings liefert mir e.ProgressPercentage immer 0...??? Fällt jemandem auf, was ich vergessen haben könnte?? LG Nadine Edit: Danke Hahne...habe deinen Link erst eben gesehen..vielleicht hilft mir das ja schon weiter ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hahne Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 private void UpdateMyProgBar() { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(UpdateMyProgBar)); return; } //Hier dann die Progressbar ansprechen } Oh zu spät gesehn, dass du schon wieder was geschrieben hast... sry weiß grad auch nicht warum er kein Wert mitliefert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 Wo kommt i her, wo kommt x her? Ist es gewollt, dass man den Thread nicht abbrechen kann? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hahne Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 Ist es gewollt, dass man den Thread nicht abbrechen kann? Auf was ist das jetzt bezogen? Auf den Backgroundworker? Wenn ja bin ich gerade am überlegen. Ich glaube der Backgroundworker hatte noch eine Property in der man einstellen konnte ob Threadabbrüche erlaubt sind oder nicht. Bin mir aber nicht sicher. Musste mal nachschauen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sarene Geschrieben 9. Juni 2009 Autor Teilen Geschrieben 9. Juni 2009 (bearbeitet) Wo kommt i her, wo kommt x her? Ist es gewollt, dass man den Thread nicht abbrechen kann? i und x haben bei mir festgelegte Werte, die hab ich nicht mitreinkopiert,damit der Code (hoffentlich!) etwas übersichtlicher aussieht... Und das mit dem Abbrechen werde ich noch machen... also daran liegts nicht... das Problem ist...dass ich von einer Klasse versuche auf ein Steuerelement einer WindowsForm zuzugreifen...ich habe keine Instanz von der WindowsForm ...mein Ausbilder meint, dass normalerweise der Debugger an der Stelle halten müsste...macht er aber nicht. Er bringt nur die Meldung (wie oben schon mal erwähnt...), Reference to a non-shared member requires an object reference. wenn ich den Wert mit "ADD Watch" auslese (ich benutze Visual Studio 2008). Also wie kann man Steuerelemente einer WindowsForm von fremden Klassen "ansprechen"...in den Properties der Progressbar gibt es als modifier "Friend,Protected Friend, Public,Protected,Private"...aber es müsste doch Shared sein, dass ich die Werte auch ändern kann??? Oder bin ich jetzt komplett auf einem falschen Dampfer?? Bearbeitet 9. Juni 2009 von Sarene Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0815FIA Geschrieben 9. Juni 2009 Teilen Geschrieben 9. Juni 2009 du könntest dein form auch einfach an die klasse übergeben. im form machst du dann einfach ne methode die du dann nutzen kannst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 10. Juni 2009 Teilen Geschrieben 10. Juni 2009 Er bringt nur die Meldung (wie oben schon mal erwähnt...), Reference to a non-shared member requires an object reference. Hatte vergessen mir den Eröffnungspost durchzulesen. Die Progressbar sollte nicht statisch (shared) sein. Denn das heißt, dass sie für jede Instanz der Klasse gleichzeitig benutzt wird (böse bei Multithreading). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sarene Geschrieben 10. Juni 2009 Autor Teilen Geschrieben 10. Juni 2009 Danke für eure Tipps !!! :-) Ich habe es jetzt so gelöst, dass ich eine neue WindowsForm erstellt habe,die ausschließlich die Progressbar enthält... Im Konstruktor meiner Klasse wird die Form instanziert und beim "Sendevorgang " wird die Form mit der Progressbar angezeigt. Auf diese Weise kann ich das Steuerelement aus der Klasse heraus "ansprechen". Danach schließe ich die Form wieder. Jetzt klappt es so, wie ich es mir vorgestellt habe.. ist zwar bestimmt nicht die sauberste Methode :-)..aber im Moment fällt mir nichts besseres ein!! LG Sarene Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.