Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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

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.

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.

  • Autor
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

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

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.