[英]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.