Label in For-Schleife bei VB2010

Gast #6286263
Guten Morgen,
ich habe ein Problem mit der FOR-Schleife von VisualBasic2010.
Ich möchte bei Erreichen eines bestimmten Wertes der Laufvariablen diese 
bei einem Label anzeigen. Hier der Minimalcode (Rest schon entfernt!):

Public Class Form1
    Shared i As Short

    Private Sub Button1_Click(sender As System.Object, e As 
System.EventArgs) Handles Button1.Click
        For i = 0 To 100
            If i = 67 Then
                Label2.Text = "67"
            End If
            Debug.Print(i)
            System.Threading.Thread.Sleep(100)
        Next
    End Sub

End Class

Das Programm soll mir beim Erreichen von i=67 eine "67" ins Label2 
schreiben.
Die FOR-Schleife wird einfach mit dem Button1 gestartet.
Beim erreichen von 67 ist die Schrift im Label2 nur noch halb zu sehen 
und erst am Ende der Schleife steht im Label2 die 67 drin! Wenn ich in 
den Eigenschaften den Wert AutoSize auf False ändere bleibt zumindest 
die Schrift im Label2 bis zum Ende vollständig erhalten.
Warum???
Eigentlich wollte ich im Label2 den Wert von i beim Durchlauf anzeigen 
lassen.
Schönen Pfingstmontag noch
J.
#6286305
VB-MD schrieb:
> Eigentlich wollte ich im Label2 den Wert von i beim Durchlauf anzeigen
> lassen.

Solange du mit deiner Schleife den Main Thread blockierst, kann das 
Betriebssystem nichts zeichnen. Daher nimmt man bei länger laufenden 
Aktionen Worker Threads. Siehe hier: 
https://en.wikipedia.org/wiki/Thread_(computing)#Multithreading
Alternative Lösungen ohne eigenen Thread wurden bereits genannt, ich 
wollte dir eigentlich nur das Problem verdeutlichen.

Bei kurzen Aktionen wie beim Zählen auf 100 sollte das eigentlich so 
schnell gehen, dass man garnicht bemerkt, dass die Oberfläche kurzzeitig 
eingefroren ist.

Zu welcher Kategorie Dein Programm gehört hängt davon ab, was du in der 
Schleife wirklich machst.

Den Main Thread mit einem Sleep zu blockieren ist nicht nett gegenüber 
dem restlichen Programm, dafür nimmt man eher Timer und lässt sich nach 
jeweils 100ms benachrichtigen.

  Michael
Gast #6286382
Danke Michael,
wie Du schon vermutest, ist die Schleife eigentlich mein Haptprogramm. 
Sie zählt dann bis 4097 und gibt jedesmal über die COM1 zwie Zeichen an 
einen ATMega32. Deshalb auch der Sleep-Befehl damit die serielle 
Schnittstelle mitkommt. Ich wollte bloß dabei sehen wie weit der Prozess 
schon ist! Bisher sehe ich dies nur im Direktfenster.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.