C# WinForm窗体 控件Control 的 InvalidateUpdateRefresh的区别

Posted LongtengGensSupreme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WinForm窗体 控件Control 的 InvalidateUpdateRefresh的区别相关的知识,希望对你有一定的参考价值。

 

Control.Refresh - does an Control.Invalidate followed by Control.Update.
Refresh: 强制控件使其工作区无效并立即重绘自己和任何子控件。== Invalidate Update

Control.Invalidate - invalidates a specific region of the Control (defaults to entire client area) and causes a paint message to be sent to the control.Invalidate marks the control (region, or rect) as in need of repainting, but doesn‘t immediately repaint (the repaint is triggered when everything else has been taken care of and the app becomes idle).
Invalidate: 使控件的特定区域(可以自己设置区域,从而提高性能)无效并向控件发送绘制消息。
                将控件标记为需要重绘,但是不会立即执行刷新重绘,等到系统空闲时进行重绘


Control.Update - causes the Paint event to occur immediately (Windows will normally wait until there are no other messages for the window to process, before raising the Paint event).Update causes the control to immediately repaint if any portions have been invalidated.
Update: 使控件重绘其工作区内的无效区域,立即调用Paint事件。若有无效区域,Update将立即触发重绘。

The paint event of course is where all the drawing of your form occurs. Note there is only one pending Paint event, if you call Invalidate 3 times, you will still only receive one Paint event.
Paint: 无处不在。如果你调用3次Invalidate,但是系统将只触发一次Paint事件

 

Most of the time Invalidate is sufficient, and advisable as you can do a bunch of invalidations (either explicit or implicit) and then let the control repaint itself when the app is idle. It is advisable to use Update or Refresh when you want the control to immediately repaint because the app will not be idle for a user-noticable period of time.

大多数时候Invalidate已经足够了,当系统要集中进行大量的刷新重绘时,建议使用Invalidate,因为这样系统最终只进行一次刷新,提高了系统性能。如果你想立即执行刷新的时候,建议使用Refresh方法。

以上是关于C# WinForm窗体 控件Control 的 InvalidateUpdateRefresh的区别的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm 透明控件 PictureBox透明

C#winform怎样等所有控件加载完再显示窗体?C#透明窗体显示时闪现黑块怎么解决?

C#winform怎样等所有控件加载完再显示窗体?C#透明窗体显示时闪现黑块怎么解决?

C#在winform窗体中怎么制作把方形按钮控件变成圆形的啊

c# winform程序,我定义一个类,一个窗体,如何在类中访问一个窗体的控件。

C# Winform 控件或窗体失去焦点时,获取键盘输入数据(我用winform获取另一个窗口的数据)