none
Label aktualisieren RRS feed

  • Frage

  • Hallo zusammen,

    ich schreibe gerade an einer Anwendung und möchte während der Laufzeit ein Label aktualisieren.

    Hier mal mein Beispiel-Code:

    Private Sub sbSync_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles sbSync.Click
        
    If cnnTablet.State = System.Data.ConnectionState.Open And cnnServer.State = System.Data.ConnectionState.Open Then
    
                    lblBox.Content = "Synchronisation wird gestartet." 
    
                    Thread.Sleep(3000)
                    
                    'Call SyncWunden()
    
                    lblBox.Content = "Synchronisation abgeschlossen!"
                
    Else
    
                    lblBox.Content = "Synchronisation fehlgeschlagen!"
                
    End If
    
    End Sub

    Mein Problem. Mir wird nur der Text "Synchronisation abgeschlossen!" angezeigt. Die Sleep-Funktion spricht er auch an. daher dauert es 3 Sekunden bis mir der Text angezeigt wird. aber warum zeigt er mir den ersten Text nicht an?

    Mfg

    Robbo

    Freitag, 16. Mai 2014 07:51

Antworten

  • Hallo Robbo,

    das ist das gleiche Problem wie in Deiner vorherigen Frage:

    Du legst den GUI Thread schlafen und so wird das Label nicht aktualisiert - während eines Nickerchens wird nun mal nicht gearbeitet ;)

    Thread.Sleep sollte man allgemein vermeiden; auch fürs Testen, ist es i. a. eine schlechte Wahl.

    Um die Anzeige während einer längerdauernde Aktion im GUI Thread zu aktualisieren, brauchst Du etwas wie DoEvents - für WPF siehe http://stackoverflow.com/questions/4502037/where-is-the-application-doevents-in-wpf

    Wobei es i. a. besser ist, die andauernde Arbeit in einen Hintergrund-Thread mittels  BackgroundWorker oder die Task-Parallel-Libary (TPL) zu verlagern. Dann wird der GUI Thread nicht belegt und kann sich seiner Hauptaufgabe widmen, der Anzeige der Oberfläche.

    Gruß Elmar

    • Als Antwort markiert Robbo1984 Freitag, 16. Mai 2014 09:34
    Freitag, 16. Mai 2014 08:07
    Beantworter

Alle Antworten

  • Hallo Robbo,

    das ist das gleiche Problem wie in Deiner vorherigen Frage:

    Du legst den GUI Thread schlafen und so wird das Label nicht aktualisiert - während eines Nickerchens wird nun mal nicht gearbeitet ;)

    Thread.Sleep sollte man allgemein vermeiden; auch fürs Testen, ist es i. a. eine schlechte Wahl.

    Um die Anzeige während einer längerdauernde Aktion im GUI Thread zu aktualisieren, brauchst Du etwas wie DoEvents - für WPF siehe http://stackoverflow.com/questions/4502037/where-is-the-application-doevents-in-wpf

    Wobei es i. a. besser ist, die andauernde Arbeit in einen Hintergrund-Thread mittels  BackgroundWorker oder die Task-Parallel-Libary (TPL) zu verlagern. Dann wird der GUI Thread nicht belegt und kann sich seiner Hauptaufgabe widmen, der Anzeige der Oberfläche.

    Gruß Elmar

    • Als Antwort markiert Robbo1984 Freitag, 16. Mai 2014 09:34
    Freitag, 16. Mai 2014 08:07
    Beantworter
  • Dankeschön... Jetzt habe ich es geschafft. Musste mich da aber erstmal genau einlesen....
    Freitag, 16. Mai 2014 09:34