2014-01-23 53 views
1

我試圖運行四種方法,但每次運行方法之間,我都希望程序等待一秒鐘。這裏的代碼,我真的不知道如何去做這件事,提前謝謝!在c#中設置方法之間的延遲#

private void go_Click(object sender, EventArgs e) 
{ 

    { 
     while (GlobalVar.Direction == "down") 
     { movedown();} 
     while (GlobalVar.Direction == "up") 
     {moveup();} 
     while (GlobalVar.Direction == "right") 
     {moveright();} 
     while (GlobalVar.Direction == "left") 
     {moveleft();} 
    } 
} 
+0

整個應用程序應該在延遲期間掛起還是什麼? – zerkms

+0

這些方法在做什麼?他們是否在屏幕上移動UI組件? –

回答

5

讓你的方法async和使用await Task.Delay(1000)

像這樣:

private async void go_Click(object sender, EventArgs e) 
{ 

    { 
     while (GlobalVar.Direction == "down") 
     { 
      await Task.Delay(1000); 
      movedown(); 
     } 
     ... 
    } 
} 
+0

+1需要.Net 4.5,但對任何新項目都應該沒問題。 –

+0

這很好,謝謝你,你能解釋一下'async'是什麼嗎? –

+0

@LucasHolmes你可以閱讀文檔:http://msdn.microsoft.com/en-us/library/vstudio/hh191443(v=vs.110).aspx和http://msdn.microsoft.com/en-我們/雜誌/ jj991977.aspx –

0

介紹一秒的延遲,請使用以下電話:

System.Threading.Thread.Sleep(1000); 

的「 1000「是指1000毫秒或1秒。

+0

「Thread.Sleep」的問題是如果他的代碼在主線程上運行,整個應用程序將凍結一秒,這可能不是他想要的。 –

0

如果您不想(或不能)使用async您可以將您的方法添加到「腳本」並讓計時器一次拾取一個步驟。即使用Queue代碼看起來類似於以下(未測試)代碼:

var script = new Queue<Action>(); 
script.Enqueue(movedown); 
script.Enqueue(moveup); 

var timer = new Timer(1000); 
timer.Elapsed += (s,e)=> 
    { 
    if (script.Count > 0) 
    { 
     script.Dequeue()(); 
    } 
    else 
    { 
     timer.Enabled = false; 
    } 
    }; 
timer.Enabled = true;