需求分析:
我們在做winform開發的時候,有時候需要讓程序休眠幾秒鐘,但是如果我們直接使用 Thread.Sleep()函數的話,頁面UI就會停止響應。怎麼樣解決呢,你可以把頁面涉及到表現UI的代碼放到一個單線程處理,也可以採用我面的方法,加一個小函數就ok了。
if (MessageBox.Show("確定要清理嗎?", "確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
this.labMsg.Text = "正在清理,請稍候...";
ThreadPool.QueueUserWorkItem(state =>
{
//延遲2秒執行
Thread.Sleep(2000);
labMsg.BeginInvoke(new Action(() =>
{
//這裏是實現某個功能的代碼,返回結果給UI
string result = Clean();
this.labMsg.Text = result;
}));
});
}
也可以在線程裏面休眠,然後再到主線程:
void Sleep()
{
Thread sub = new Thread(() =>
{
//這裏還可以處理些比較耗時的事情
Thread.Sleep(1000);//休眠時間
this.Dispatcher.Invoke(new Action(() =>
{
DoSomeThing();//調用處理事件
}));
});
}
//休眠後你要做的事情
void DoSomeThing()
{
}