关于Refresh()与Invalidate()的一点体会

   最后做了一个显示进度的toolStripStatusLabel,用来显示当前的进度。开始的时候设置为“未打开文件”,进行的时候显示为“正在打开文件”,完成之后显示为“打开文件成功”。但在实际运行程序的时候,中间那个“正在打开文件”没有显示。开始的时候我猜是因为没有重绘控件,于是看了下toolStripStatusLabel有个Invalidate()的函数是用来重绘控件,但用了之后也没反应。后来我拿toolStripStatusLabel的父控件statusStrip进行Refresh()的操作,竟然行了。

    实际上Invalidate()与Refresh()是有所不同的,Invalidate()调用的是一个异步的win32api,而Refresh()调用的是 同步的win32api,所以我认为没有显示出文字是因为异步的时候文字还没显示出来就又被改变回去。

原文地址:https://www.cnblogs.com/sober/p/1364371.html