你好我想移动到的下一行代码之前找到的等待毫秒数的方法,
我已经调查了Thread.Sleep但这将冻结的主要形式,我想这对保持活跃。
我试图定时器和秒表和冻结两者的主要形式,当他们时,他们剔应该张贴到控制台。
我无法找到我想无论是等待使用task.delay或后台工作的方式。
伪代码:
Wait 2 - 6 seconds
Log "waiting"
Log "waiting"
Log "waiting"
Stop Waiting - Run next line of code.
我曾尝试只是冻结的形式和事后填写日志的方法,我只是想等待无严寒的形式,也不必处理事件被称为这意味着下一行是不是运行一个简单的方法。
因为我还是新的C#和它是推动我有点疯任何帮助将是真棒:(
该await
关键字,会同Task.Delay
使这个微不足道的。
public async Task Foo()
{
await Task.Delay(2000);
txtConsole.AppendText("Waiting...");
DoStuff();
}
尝试使用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!";
}
定时器应该在这种情况下正常工作,除非你把了Thread.Sleep在其处理或处理程序本身需要太多的时间来完成。
您还没有指定您所使用的UI框架或.NET版本,但最新的.NET你可以使用异步/ AWAIT。 这样一来,用户界面不会,而你的代码等待到达后台任务冻结
void async MyMethod()
{
var result = await Task.Run(() => long_running_code);
}
DateTime Tthen = DateTime.Now;
do
{
Application.DoEvents();
} while (Tthen.AddSeconds(5) > DateTime.Now);