[英]Why does Thread.Sleep() behave in this way?
這是我寫的一個簡單的代碼:
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "first";
Thread.Sleep(1000);
label1.Text = "second";
}
但標簽永遠不會顯示“第一”。 我使用斷點檢查並且語句 label1.text="first" 被執行但沒有在標簽中顯示 'first',只顯示 'second'。
為什么會這樣?
那是因為你讓主線程休眠。 因此無法將新文本繪制到標簽上。
您可以使用以下命令“強制”處理隊列中的(繪制)事件:
Application.DoEvents();
Thread.Sleep(1000);
但是,請閱讀此問題“Application.DoEvents() 的使用”
執行Thread.Sleep
的那一刻,UI 線程正在休眠。 因此,不會執行負責更新 UI 的代碼(它可以在button1_Click
方法返回時執行)並且您看不到結果。
據我所知,編譯器會選擇最先編譯哪一行。 因此,如果您要評論 label1.Text = "second" 它應該在 1 秒延遲后在您的標簽中顯示“first”。 你可以通過這樣做來證明:
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "first";
Thread.Sleep(1000);
if (label1.Text == "first")
{
label1.Text = "second";
}
}
它仍然會顯示“second”,因為 label1.Text 設置為“first”但太短,因為它發生在睡眠之后,這就是為什么你看不到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.