Sub warten lassen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Sub warten lassen

    Hallo zusammen

    Ich habe eine Form mit ein paar PictureBoxen. Diese sollen nacheinander geladen werden.
    Dafür habe ich einfach mal

    VB.NET-Quellcode

    1. System.Threading.Thread.Sleep(500)

    genommen, das ein kleiner Abstand zwischen den Vorgängen besteht.

    Leider friert dabei die ganze Form ein und ist für ca. 5 Sekudnen nicht mehr verfügbar.

    Kann man auch eine Sub einfrieren (warten lassen) ?

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Hier mal eben Qucik´n Dirty: Wenn du aufn Button klickst gehts los

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Control.CheckForIllegalCrossThreadCalls = False 'ganze foul aber Quick´n Dirty
    3. Dim t As New Threading.Thread(AddressOf Zeigen) ' thread mit der Funtkion Zeigen erstellen
    4. t.IsBackground = True ' Thread im Hintergrund laufen lassen
    5. t.Start() 'sollte klar sein
    6. End Sub
    7. Private Sub Zeigen()
    8. PictureBox1.Image = My.Resources.Bild1
    9. Threading.Thread.Sleep(500)
    10. PictureBox2.Image = My.Resources.Bild2
    11. Threading.Thread.Sleep(500)
    12. PictureBox3.Image = My.Resources.Bild3
    13. 'undso weiter
    14. End Sub
    Für kurze Wartezeiten hilft folgende Methode:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' wartet x Millisekunden (GUI-freundlich)
    3. ''' </summary>
    4. Public Sub WaitOnGUI(ByVal ms As Integer)
    5. ' timeout festlegen
    6. Dim timeOut As Date = Date.Now().AddMilliseconds(ms)
    7. ' bis timeout warten
    8. While timeOut > Date.Now
    9. Application.DoEvents() ' GUI Ereignisse erlauben
    10. End While
    11. End Sub

    Umfangreiche Tätigkeiten sollten in einen eigenen Thread (z.B. mit Backgroundworker) ausgelagert werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kangaroo“ ()

    Danke für die vielen Tipps.

    @Sortec
    Das "t.IsBackground = true" löst alle meine Probleme oder ?
    Denn System.Threading.Thread.Sleep(500) bewirkt wahrscheindlich das gleiche wie Threading.Thread.Sleep(500) oder ?

    @Kangaroo
    Verstehe ich denn Copde richtig, dass du eine Zeit vorlegst. Und er solange warten soll bis die das voherige Datum + die Zeitangabe die jetzige Zeit abwarten ?
    Was bitteschön ist den <Summary> ?

    @MB-Tech
    Allerdings ne lange Möglichkeit. Wer ich mir morgen mal genau anschauen.

    Danke an alle die bisher gepostet haben.

    Mfg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...

    Dancger schrieb:

    @Kangaroo
    Verstehe ich denn Copde richtig, dass du eine Zeit vorlegst. Und er solange warten soll bis die das voherige Datum + die Zeitangabe die jetzige Zeit abwarten ?

    Richtig. Innerhalb der Schleife wird solange Application.DoEvents ausgeführt bis die Zeit erreicht ist. Das Statement unterbricht den Code und erlaubt es GUI-Events von Controls (z.B. Ziehen , Vergrössern einer Form) auszuführen.

    Dancger schrieb:

    Was bitteschön ist den <Summary> ?

    Eine spezielle Art Methoden / Properties zu Kommentieren (siehe XML-Dokumentations Features ). Wenn Du z.B. in Deinem Programm jetzt WaitOn eingibts, so zeigt Dir Intellisense auch den Kommentar an.