C# 无效方法做什么?

C# 无效方法做什么?,c#,.net,winforms,C#,.net,Winforms,invalidate方法在winform应用程序中做什么 Invalidate() 谢谢….要求windows重新绘制无效窗口的客户端区域 从MSDN: “使控件的整个表面无效,并导致控件重新绘制。” 这是一种GUI呈现方法-它强制windows重新绘制控件的可见部分。它基本上调用控件的PaintBackground和Paint方法。它导致控件重新绘制。 除非执行一些低级图形操作,否则很少需要调用此方法。Invalidate()方法将重新绘制控件。例如,如果使用包含标签和文本框的面板“pane

invalidate
方法在
winform
应用程序中做什么

Invalidate()


谢谢….

要求windows重新绘制无效窗口的客户端区域

从MSDN:

“使控件的整个表面无效,并导致控件重新绘制。”


这是一种GUI呈现方法-它强制windows重新绘制控件的可见部分。

它基本上调用控件的PaintBackground和Paint方法。

它导致控件重新绘制。

除非执行一些低级图形操作,否则很少需要调用此方法。

Invalidate()方法将重新绘制控件。例如,如果使用包含标签和文本框的面板“panel1”,则以下代码将重新绘制标签和文本框(通过调用Paint事件)


Windows窗体使用GDI进行渲染。GDI是Windows中的原始图形界面。DirectX是一个较新的界面,最初是为游戏开发而创建的,但现在也被WPF等更高级别的框架使用

GDI基于绘制方法的概念。当显示窗口时,Windows将向负责该窗口的代码发送一条绘制消息。这将导致调用paint方法。然后,绘制方法应将窗口的内容绘制到屏幕上

当GDI程序想要更新显示内容时,它不能直接将更新后的图像绘制到屏幕上。相反,它必须告诉Windows某个区域需要更新。这称为使区域无效。然后,Windows将调用相关的绘制方法,提供有关哪些内容无效且需要更新的信息。然后,绘制方法应将更新的内容绘制到屏幕上

在其他窗口之间拖动窗口时,也会使用此更新屏幕内容的方法。当GDI被开发出来时,图形硬件相当慢,很多工作都是在Windows中完成的,以缓存位图,并仅使更改的内容无效和更新

当绘制重叠窗口或子窗口时,将从后向前进行,以获得视觉元素的正确分层。这可能会导致闪烁,其中背景被擦除并绘制,然后是前面的其他元素。如果重绘速度低于屏幕刷新速度,您可能会注意到一些闪烁。这是可能使用Windows窗体创建的GDI应用程序的迹象


在Windows窗体中,当您使控件无效时请求重新绘制控件时

“使整个曲面无效”的确切含义是什么?因为我的英语不太好,谢谢。@Aryan:换句话说,这里的invalidate表示它看起来“需要更新”。它不强制。它请求重新绘制。@All,根据我的解释(如果错误,请告诉我),当前区域无效,以使其有效并重新绘制again@Henk明白了。我可以看出这是一个重要的细节。我会编辑,它不会强制。它需要重新油漆。这很公平——我应该记得windows不喜欢接受命令不。它们是从MSGLOOP非常干净的答案中调用的。非常感谢您澄清我的问题……我喜欢您答案中的以下文字=>“关于无效内容和需要更新的内容”。实际上,绘画不是GDI的一部分,而是Windows体系结构的一部分。@Henk Holterman:您是对的。我要解释的是一个关于GDI(图形设备界面)+用户(用户界面包括windows管理和消息传递)的非常简短的故事。你的解释(“GDI基于绘画方法的概念”)让windows和GDI到处混淆。示例:GDI也用于打印,因此不涉及绘制或无效。我这边的一个问题是:如果您在处理程序(如MouseMove)中进行操作,并且您的操作速度很快,则无效会导致控件几乎始终处于数据状态。然而,如果你做了超过10毫秒的事情,调用Invalidate()并不会导致几乎实时的重画,而只是在鼠标事件变慢之后。然后发出Update()以强制重新绘制,这会有所帮助。原因似乎在于调度员和调度优先级。Draw最高,鼠标事件次之,invalidate最低。计算时间过长会导致拥塞(似乎是这样)
panel1.Invalidate();