我正在使用等待任务延迟。我想通过举例来理解这个问题:
private async void timer2_Tick(object sender, EventArgs e)
{
await Task.Delay(5000);
label1.Text = "1";
await Task.Delay(5000);
label1.Text = "2";
await Task.Delay(5000);
}
计时器内部:1000问题:始终将1和2写入标签。不能等待
当我将上述代码写入计时器时,它始终启动并且是无意义的。我想睡觉而不冻结表格。我怎么能这样做?
答案 0 :(得分:1)
我不完全确定为什么那不起作用,但可能有很多原因。你可能会推迟错误的线程/任务(我在Java中遇到过这个问题)?我可以问这个代码是否有效,以便我们可以获得有关该问题的更多信息吗?如果这样做,那么它应该确认问题是任务或线程问题。您需要稍微修改一下并根据需要添加断点。
DateTime begin = DateTime.Now;
DateTime firstDelay = begin.AddSeconds(5);
DateTime secondDelay = begin.AddSeconds(10);
DateTime thirdDelay = begin.AddSeconds(15);
while (begin <= firstDelay)
{
begin = DateTime.Now;
}
label1.text = "1";
while (begin <= secondDelay)
{
begin = DateTime.Now;
}
label1.text = "2";
while (begin <= thirdDelay)
{
begin = DateTime.Now;
}
答案 1 :(得分:1)
什么是计时器间隔?
试试这个:
private volatile int running;
private async void timer2_Tick(object sender, EventArgs e)
{
if (this.running != 0)
{
return;
}
Interlocked.Exchange(ref this.running, 1);
await Task.Delay(5000);
label1.Text = "1";
await Task.Delay(5000);
label1.Text = "2";
await Task.Delay(5000);
Interlocked.Exchange(ref this.running, 0);
}