等待n秒钟,然后下一行代码不会冻结形式(Wait for n seconds, then next

2019-08-23 02:10发布

你好我想移动到的下一行代码之前找到的等待毫秒数的方法,

我已经调查了Thread.Sleep但这将冻结的主要形式,我想这对保持活跃。

我试图定时器和秒表和冻结两者的主要形式,当他们时,他们剔应该张贴到控制台。

我无法找到我想无论是等待使用task.delay或后台工作的方式。

伪代码:

Wait 2 - 6 seconds
Log "waiting"
Log "waiting"
Log "waiting"
Stop Waiting - Run next line of code.

我曾尝试只是冻结的形式和事后填写日志的方法,我只是想等待无严寒的形式,也不必处理事件被称为这意味着下一行是不是运行一个简单的方法。

因为我还是新的C#和它是推动我有点疯任何帮助将是真棒:(

Answer 1:

await关键字,会同Task.Delay使这个微不足道的。

public async Task Foo()
{
    await Task.Delay(2000);
    txtConsole.AppendText("Waiting...");
    DoStuff();
}


Answer 2:

尝试使用DispatcherTimer 。 这是一个非常方便的对象,确实委托给UI线程的所有工作。

例如:

private DispatcherTimer _dtTimer = null;

public Constructor1(){
  _dtTimer = new DispatcherTimer();
  _dtTimer.Tick += new System.EventHandler(HandleTick);
  _dtTimer.Interval = new TimeSpan(0, 0, 0, 2); //Timespan of 2 seconds
  _dtTimer.Start();
}

private void HandleTick(object sender, System.EventArgs e) {
  _uiTextBlock.Text = "Timer ticked!";
}


Answer 3:

定时器应该在这种情况下正常工作,除非你把了Thread.Sleep在其处理或处理程序本身需要太多的时间来完成。

您还没有指定您所使用的UI框架或.NET版本,但最新的.NET你可以使用异步/ AWAIT。 这样一来,用户界面不会,而你的代码等待到达后台任务冻结

void async MyMethod()
{  
    var result = await Task.Run(() => long_running_code);
}


Answer 4:

DateTime Tthen = DateTime.Now;
            do
            {
                Application.DoEvents();
            } while (Tthen.AddSeconds(5) > DateTime.Now);    


文章来源: Wait for n seconds, then next line of code without freezing form