WinFom项目,在一个循环中,有个label,每次更新它的文字,但是发现循环过程中文字没有变化,像是卡住了,到循环结束,label才显示了最后一次的文字,如下图,进度条总长5,已经循环到3了,可是上面的label文字还是“0/5”没有变化。从0直接跳到5。
代码:
lblMsg.Text = progress.Value + "/" + progress.Maximum;
这个问题在WinForm中比较常见,很多控件都有这个现象,连续更新文字的话,屏幕上的文字会卡主不动,直到代码结束之后才更新为最后一次的文字。
用多线程、委托可以解决这个问题,不过代码会变得比较复杂。
思考片刻,琢磨着虽然屏幕上label的文字没有变化,但是实际内存中它的文字应该是已经变化过的,不过因为某种原因,屏幕上没能及时刷新。于是想想label有没有强制刷新的办法呢?看了下label的成员,确实有手动刷新的方法:Refresh()
lblMsg.Text = progress.Value + "/" + progress.Maximum;
lblMsg.Refresh();
效果出来了,循环过程中的文字出来了:
问题解决。