首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#任务不等待延迟计时器

C#任务不等待延迟计时器
EN

Stack Overflow用户
提问于 2018-06-02 19:22:12
回答 2查看 59关注 0票数 0

我正在使用等待任务延迟。我想通过举一个例子来理解这个问题:

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而不是等待

当我将上面的代码写入计时器时,它总是启动并且毫无意义。我想睡觉的时候不想冻结表单。我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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);
}
票数 1
EN

Stack Overflow用户

发布于 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;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50656395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档