C#延遲執行方法函數

需求分析:

我們在做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()
{ 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章