System.Threading.Thread.Sleep Problem

  • VB.NET

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

    System.Threading.Thread.Sleep Problem

    Hey,
    ich programmiere grade wieder ein kleines Spiel und benötige dabei die "Sleep" - Funktion.
    Hier vorerst mal der wichtige Teil meines Quellcodes:

    Quellcode

    1. Private Sub Button1_Click()
    2. Button1.Enabled = False
    3. System.Threading.Thread.Sleep(1000)
    4. ListBox1.Items.Add("TEXT1")
    5. System.Threading.Thread.Sleep(1000)
    6. ListBox1.Items.Add("TEXT2")
    7. System.Threading.Thread.Sleep(1000)
    8. ListBox1.Items.Add("TEXT3")
    9. Button1.Text = "TEXT"
    10. Button1.Enabled = True
    11. End Sub

    Nur, wenn ich uf den Button klicke wartet er 3 Sekuden (3000 Milllisekunden) und schreib dann alles gleichzeitig...nur Warum? oO

    MfG MF

    VB.NET-Quellcode

    1. Private Sub Button1_Click()
    2. Button1.Enabled = False
    3. System.Threading.Thread.Sleep(1000)
    4. ListBox1.Items.Add("TEXT1")
    5. Application.DoEvents
    6. System.Threading.Thread.Sleep(1000)
    7. ListBox1.Items.Add("TEXT2")
    8. Application.DoEvents
    9. System.Threading.Thread.Sleep(1000)
    10. ListBox1.Items.Add("TEXT3")
    11. Button1.Text = "TEXT"
    12. Button1.Enabled = True
    13. End Sub


    nach andys tip müsste es glaube ich so aussehen ;)
    Es klappt, aber nicht so:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ListBox1.Items.Add("TEXT1")
    3. Application.DoEvents()
    4. System.Threading.Thread.Sleep(1000)
    5. ListBox1.Items.Add("TEXT2")
    6. Application.DoEvents()
    7. System.Threading.Thread.Sleep(1000)
    8. ListBox1.Items.Add("TEXT3")
    9. Button1.Enabled = True
    10. End Sub


    Also nicht bei Form1_Load

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

    also bei mir funktioniert mein geposteter code ?(

    /edit:
    achso, du willst es im form_load-ereignis. es funktioniert deshalb nicht, da die form erst gezeigt wird, wenn der code in form_load ausgeführt wurde.

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

    ich würd den code in einen timer packen der einen intervall von 1 ms sekunde hat. in dem timer wird dann eben das ganze sichtbar gemacht und dann deaktiviert sich der timer selbst. also ungefähr so:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Timer1.Interval = 1
    3. Timer1.Enabled = True
    4. End Sub
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. ListBox1.Items.Add("TEXT1")
    7. Application.DoEvents()
    8. System.Threading.Thread.Sleep(1000)
    9. ListBox1.Items.Add("TEXT2")
    10. Application.DoEvents()
    11. System.Threading.Thread.Sleep(1000)
    12. ListBox1.Items.Add("TEXT3")
    13. Button1.Enabled = True
    14. Timer1.Enabled = False
    15. End Sub