在经过特定时间后更新 UI 控件
Updating UI control after specific time elapsed
包含自定义控件的 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();
}
控件未按要求更新。这是什么原因?
您的计时器是函数的局部变量。当函数结束时,它也结束了。所以您可能需要将声明移到其他地方。
对于一次性操作,您可以使用异步处理程序方法并添加延迟:
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();
}
包含自定义控件的 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();
}
控件未按要求更新。这是什么原因?
您的计时器是函数的局部变量。当函数结束时,它也结束了。所以您可能需要将声明移到其他地方。
对于一次性操作,您可以使用异步处理程序方法并添加延迟:
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();
}