2017-12-16 19 views
1

ボタンを押したときにアクションを実行し、少し待って別のアクションを実行しますアクション。しかし、私がこれをするとき、睡眠が終わるまで、最初の行動はしません。バックグラウンドスレッドを作成しようとしましたが、ListBoxにアクセスできません。誰かが私がこれをどうやってできるのか、なぜ私の現在のものがうまくいかないのか説明してもらえますか?ありがとうございました。VB.NET - ボタンを押すと、アクションを実行し、数秒待って別のアクションを実行します。

Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click 
    ListBox1.Items.Add("Thing1") 
    Threading.Thread.Sleep(500) 
    ListBox1.Items.Add("Thing2") 


End Sub 

答えて

3

スリープが正確に

を完了するまでには、最初のアクションを行いません。アクションは実行されますが、UIスレッドがUIを再描画できるようになるまで、UIは変更を反映しません。ただし、UIスレッドをスリープ状態にするため、これは発生しません。代わりに、睡眠の

、睡眠と同様に動作しますが、UIスレッドがUIを更新するなど、他の作業を実行するために自由に残る、Task.Delayを使用します。これが動作するために、あなたが必要とする

Private Async Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click 
    ListBox1.Items.Add("Thing1") 
    Await Task.Delay(500) 
    ListBox1.Items.Add("Thing2") 
End Sub 

お知らせメソッドシグニチャにAsyncを追加し、Task.Delay()を呼び出すとAwaitを追加します。

上記のコードの仕組みを理解するには、Asynchronous Programming with Async and Await (Visual Basic)をお読みください。

関連する問題