Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “等待任务。延迟(毫秒);”在循环时退出_C#_Loops - Fatal编程技术网

C# “等待任务。延迟(毫秒);”在循环时退出

C# “等待任务。延迟(毫秒);”在循环时退出,c#,loops,C#,Loops,我使用while循环来改变LED的颜色。我想在颜色更改之间等待1秒钟,以防止UI冻结。如果我使用wait,它似乎只是退出循环。我还能怎么做 我尝试创建一个外部方法Wait并在while循环中调用它。这可以防止循环退出,但它也不会等待1秒并立即更改颜色。Flag是由另一窗体上的按钮触发的全局变量 private async void LEDLights(int Device) { Flag = false; if (Device == 1) { while

我使用while循环来改变LED的颜色。我想在颜色更改之间等待1秒钟,以防止UI冻结。如果我使用wait,它似乎只是退出循环。我还能怎么做

我尝试创建一个外部方法Wait并在while循环中调用它。这可以防止循环退出,但它也不会等待1秒并立即更改颜色。Flag是由另一窗体上的按钮触发的全局变量

private async void LEDLights(int Device)
{
    Flag = false;

    if (Device == 1)
    {
        while (Flag == false)
        {
            //Change LED Colors
            ChangeLED(Red);
            await Task.Delay(1000);
            ChangeLED(Blue);
            await Task.Delay(1000);
            ChangeLED(Green);
            await Task.Delay(1000);
        }
    }
    else
    {

    }

    Flag = false;
}
我期待的是while循环在颜色变化之间等待1秒,同时不会冻结UI,这样我可以在需要时停止循环。
我没有发现任何错误。

我找到了答案。你的三条评论都很有帮助。将LED灯更改为任务,并使用等待LED灯1调用任务;现在可以了。谢谢

    private async Task LEDLights(int Device)
    {
        Flag = false;
        if (Device == 1)
        {
            while (Flag == false)
            {
                //Change LED Colors
                ChangeLED(Red);
                await Task.Delay(1000);
                ChangeLED(Blue);
                await Task.Delay(1000);
                ChangeLED(Green);
                await Task.Delay(1000);
            }
        }
        else
        {

        }
        Flag = false;
    }
    //called with "await LEDLights(1);"

如何调用LED灯?您有一个异步void方法。除非这是一个事件处理程序,而且看起来不是,否则这将是一个问题。请参阅。仅当异步方法是事件处理程序时,才从异步方法返回void。否则,它至少应返回Task.allow async!=多线程异步void方法的一个问题是,它们会吞下错误,因为没有人在侦听它们的完成。我怀疑被更改的方法正在抛出一个错误,导致它退出循环。我本来会选择其中一个注释作为答案,但我是社区的新手,不知道如何/如果可能,无法选择注释作为答案。通常,当答案出现在评论中时,我们不确定,或者不想花时间写一个完整、高质量的答案。在这种情况下,在回答中引用合适的人通常就足够了,但不是必需的。