在经过特定时间后更新 UI 控件

Updating UI control after specific time elapsed

包含自定义控件的 WinForms 应用程序,LabelProgressBar : ProgressBar

有一种方法可以使这个控件不可见(调用时有效):

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

我需要在该控件更改(调用其他方法 statusCompletedstatusFailed)一段时间后使其不可见(通过调用上述方法)。例如:

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();
}

控件未按要求更新。这是什么原因?

您的计时器是函数的局部变量。当函数结束时,它也结束了。所以您可能需要将声明移到其他地方。

对于一次性操作,您可以使用异步处理程序方法并添加延迟:

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();
}