我正在使用等待任务延迟。我想通过举一个例子来理解这个问题:
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写入label.Can而不是等待
当我将上面的代码写入计时器时,它总是启动并且毫无意义。我想睡觉的时候不想冻结表单。我该怎么做呢?
发布于 2018-06-03 02:26:34
计时器间隔是多少?
试试这个:
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);
}
发布于 2018-06-02 19:43:01
我不是很确定为什么它不能工作,但可能有很多原因。你可能延迟了错误的线程/任务(我在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;
}
https://stackoverflow.com/questions/50656395
复制相似问题