"ждать Task.Delay (ms);" выходит из цикла - PullRequest
0 голосов
/ 09 июля 2019

Я использую цикл while для изменения цвета светодиода.Я хочу подождать 1 секунду между сменами цвета и не допустить зависания интерфейса.Если я использую await, кажется, просто выйти из цикла.Как еще я могу это сделать?

Я попытался создать внешний метод Wait() и вызвать его в цикле while.Это удерживает цикл от выхода, но также не ждет 1 секунду и мгновенно меняет цвета.Флаг - это глобальная переменная, которая вызывается кнопкой в ​​другой форме.

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 секунду между сменой цвета и пока не замораживает пользовательский интерфейс, поэтому я могу остановитьЦикл, когда я хочу.Я не получаю никаких ошибок.

1 Ответ

1 голос
/ 09 июля 2019

Я понял это. Все три ваших комментария были полезны. Изменяя LEDLights на задачу и вызывая ее с помощью «await LEDLights (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);"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...