Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Winform控件。刷新保证同步?_C#_.net_Winforms - Fatal编程技术网

C# Winform控件。刷新保证同步?

C# Winform控件。刷新保证同步?,c#,.net,winforms,C#,.net,Winforms,调用WinForms方法在MSDN中描述为: 强制控件使其客户端区域无效,并立即重新绘制自身和所有子控件 我正在调试一个间歇性问题,该问题似乎是在连接的显示器切换扫描信号(有效地改变分辨率)时发生的,其中Control.Refresh似乎没有生成预期的Control.OnPaint调用。我正在检测应用程序以获取更多信息,但是我很好奇这是否真的是运行时决定不调用OnPaint,因为它检测到显示暂时消失 这对我来说似乎不太可能,我希望我会找到其他的冒烟枪,但我正在发布一篇文章,希望有人在野外看到过这

调用WinForms方法在MSDN中描述为:

强制控件使其客户端区域无效,并立即重新绘制自身和所有子控件

我正在调试一个间歇性问题,该问题似乎是在连接的显示器切换扫描信号(有效地改变分辨率)时发生的,其中Control.Refresh似乎没有生成预期的Control.OnPaint调用。我正在检测应用程序以获取更多信息,但是我很好奇这是否真的是运行时决定不调用OnPaint,因为它检测到显示暂时消失


这对我来说似乎不太可能,我希望我会找到其他的冒烟枪,但我正在发布一篇文章,希望有人在野外看到过这种情况,并对如何处理这种情况提出一些建议。

不,不能保证。如果控件没有可绘制的屏幕,则不会触发绘制消息

但一旦控件再次出现在屏幕上,油漆消息应再次触发


您正在尝试绘制调试信息吗?如果控件不在屏幕上,则调用refresh时会发生什么情况?

不,不保证。如果控件没有可绘制的屏幕,则不会触发绘制消息

但一旦控件再次出现在屏幕上,油漆消息应再次触发


您正在尝试绘制调试信息吗?如果控件不在屏幕上,那么调用refresh时会发生什么情况?

谢谢-我设计了几个实验来验证这一点,但它们给了我矛盾的结果。我制作了一个简单的表单,其中OnMove写入控制台,并触发刷新。正如您所描述的,当表单出现在屏幕上时,我看到刷新(以及随后的OnPaint)触发。如果我将其移出屏幕(使用左上角的移动键和箭头键),刷新将停止触发,直到窗体的某个部分再次出现在屏幕上。但是,如果我创建了一个计时器,并让它更改窗体的位置,使其滚动到屏幕的左侧,我确实会收到OnMove/OnPaint事件。@holtavolt我只是尝试确认一下,但是如果控件在屏幕外,计时器不会与paint事件有任何不同。OnMove,当然可以,但不能绘制。您的OnMove是否正在执行刷新()?是的,这会导致OnPaint启动,即使控件在屏幕外。@holtavolt是的,我启动了,但它不会启动OnPaint。不管你想做什么,你可能不应该在绘画活动中加入逻辑。我们做的有什么不同?这总是在激发OnPaint:-我同意绘画事件逻辑。谢谢-我设计了两个实验来验证这一点,但他们给了我矛盾的结果。我制作了一个简单的表单,其中OnMove写入控制台,并触发刷新。正如您所描述的,当表单出现在屏幕上时,我看到刷新(以及随后的OnPaint)触发。如果我将其移出屏幕(使用左上角的移动键和箭头键),刷新将停止触发,直到窗体的某个部分再次出现在屏幕上。但是,如果我创建了一个计时器,并让它更改窗体的位置,使其滚动到屏幕的左侧,我确实会收到OnMove/OnPaint事件。@holtavolt我只是尝试确认一下,但是如果控件在屏幕外,计时器不会与paint事件有任何不同。OnMove,当然可以,但不能绘制。您的OnMove是否正在执行刷新()?是的,这会导致OnPaint启动,即使控件在屏幕外。@holtavolt是的,我启动了,但它不会启动OnPaint。不管你想做什么,你可能不应该在绘画活动中加入逻辑。我们做的有什么不同?这总是触发OnPaint:-我同意paint事件逻辑。