【发布时间】:2020-06-15 08:58:00
【问题描述】:
包含自定义控件LabelProgressBar : ProgressBar 的 WinForms 应用程序。
有一种方法可以使这个控件不可见(调用时有效):
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();
}
控件未按要求更新。这是什么原因?
【问题讨论】:
-
确保在调用
.Start()时也启用了Timer。StatusIdle()被调用?你确定你没有得到一个跨线程异常吗?当从Timer调用StatusIdle()时,我确信需要调用。 -
@Tomek 添加
timer.Enabled=true后,我刚刚尝试过。同样的问题。不会抛出异常。 -
如果它是线程计时器,则需要通过调用将其编组到 UI 线程
-
... 或将表单设置为Timer.SynchronizingObject 或使用System.Windows.Form.Timer,因此不需要编组(另外,它也可以工作:)。
标签: c# .net winforms timer controls