簡體   English   中英

嘗試使標簽顯示文本,等待,然后關閉程序(C#)

[英]Trying to make label display text, wait, then close the program (C#)

嗨,我一直在嘗試向我的程序中添加一個按鈕,當您單擊該按鈕時,它會在標簽中顯示文本,等待用戶讀取它,然后退出程序。 但是如果我運行它並嘗試,它只會等待,然后退出而不顯示文本。 抱歉,如果這是一個不好的解釋,我剛開始編碼。 這就是我所擁有的。

private void button3_Click(object sender, EventArgs e)
{
    label1.Text = "Text Here";
    Thread.Sleep(500);
    this.Close();
}

調用label1.Invalidate()強制重新繪制控件。 當您調用Thread.Sleep ,UI線程將被阻止並且不會更新。

如果這不起作用,請嘗試label1.Refresh()Application.DoEvents(); label1.Refresh()

private void button3_Click(object sender, EventArgs e)
{
    label1.Text = "Text Here";
    label1.Invalidate();
    Thread.Sleep(500);
    this.Close();
}

一個更理想的解決方案是使用計時器,另一個線程或某種異步事件來與UI分開運行代碼:

timer = new Timer();
timer.Interval = 500;
timer.Tick += (sender, e) => Close();
timer.Start();

要么

new Thread(delegate() { 
    Thread.Sleep(500);
    this.Close(); 
}).Start();

還要注意,500毫秒是很短的時間,您是說5000毫秒,相當於5秒鍾嗎? 您可能還想看看Winforms:Application.Exit與Enviroment.Exit與Form.Close ,因為Close() 關閉 當前窗口。

與其使用Thread.Sleep阻止UI線程(並使其不隨文本更新),不如讓UI保持響應狀態更好。 這將使UI正常工作並延遲然后關閉應用程序。

private void button3_Click(object sender, EventArgs e)
{
    label1.Text = "Text Here";
    Task.Delay(5000).ContinueWith((arg) => Application.Exit());
}

Task在另一個線程中運行,延遲指定的毫秒數(在這種情況下為5000或5秒),然后繼續調用以關閉應用程序。

順便說一句,僅當您從中運行應用程序的表單是應用程序的“初始”表單時, this.Close()才能關閉該應用程序。 如果您從另一個子窗體中運行了相同的代碼,則只會關閉該窗體。 如果要實際關閉應用程序,更好的方法是使用Application.Close()方法。 這將正常關閉應用程序。 如果要完全終止,可以使用Environment.Exit(int)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM