Zum Inhalt springen

Progressbar in einem Thread


Sarene

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Sarene
Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :rolleyes:

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...