2014-01-23 50 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;