Обновление элемента управления пользовательского интерфейса по истечении указанного c времени - PullRequest
0 голосов
/ 03 марта 2020

Приложение WinForms, содержащее пользовательский элемент управления, LabelProgressBar : ProgressBar.

Существует метод, позволяющий сделать этот элемент управления невидимым (он работает при вызове):

void statusIdle()
{
    labelProgressBar1.Visible = false;
}

Мне нужно сделать этот элемент управления невидимым (вызывая описанный выше метод) определенное количество времени после его изменения (вызов других методов statusCompleted или statusFailed). Например:

void statusCompleted(string action)
{
    // this is working
    labelProgressBar1.Visible = true;
    labelProgressBar1.Value = 100;
    labelProgressBar1.setColourAndText(LabelProgressBarColours.WARNING_COLOUR, action + " Completed With Warnings");

    // this is not
    Timer timer = new Timer();
    timer.Interval = 1000;
    timer.AutoReset = false;
    timer.Elapsed += new ElapsedEventHandler(timerElapsed);
    timer.Start();
}

Обработчик события для таймера:

private void timerElapsed(object source, ElapsedEventArgs e)
{
    statusIdle();
}

Элемент управления не обновляется должным образом. В чем причина этого?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

для одноразовой операции вы можете использовать метод обработчика asyn c и добавить задержку:

async void statusCompleted(string action)
{
    labelProgressBar1.Visible = true;
    labelProgressBar1.Value = 100;
    labelProgressBar1.setColourAndText(LabelProgressBarColours.WARNING_COLOUR, action + " Completed With Warnings");

    await Task.Delay(1000);
    statusIdle();
}
1 голос
/ 03 марта 2020

Ваш таймер является локальной переменной функции. Когда функция заканчивается, она тоже заканчивается. Так что вам, вероятно, нужно переместить декларацию в другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...