[英]Why is it an abuse to call refresh()?
就像在这个例子中一样:
someImage.Source = newSource;
someImage.refresh();
几天前,在这篇文章中,我回复了 refresh(),我收到反馈说这是一种黑客/滥用行为。 我不明白为什么。
MSDN 有答案。
控制. Control.Refresh
:
强制控件使其客户区无效并立即重绘自身和任何子控件。
控制. Control.Invalidate
:
使控件的整个表面无效并导致控件被重绘。 [...]调用 Invalidate 方法不会强制同步绘制
[强调我的]
关键是Refresh
与Invalidate
不同,它强制进行同步调用,这有效地中断了 forms 中的默认事件流并切断了消息队列中的行。 这可能会导致其他 window 消息(来自操作系统的事件)被延迟。
如果您有响应式用户界面,则根本不需要Refresh
方法调用。 设置Source
属性会创建一条消息,使控件的显示无效,因此在处理该消息时将自动刷新。
只有当您的代码包含一个长时间运行的循环,因此它在很长一段时间内根本不处理消息时,您才需要使用Refresh
方法。 应避免如此长时间的运行循环,因为它会导致用户界面无响应。
通过简单的话Refresh()
将重新加载 UI,当一些变化
因为如果您正确使用它们,大多数 gui 框架会自动处理刷新/更新。
通过刷新,您可以解决症状(某些内容不会自动更新),而不是解决根本原因。
问题是刷新通常开始像病毒一样传播。 你将它插入一个地方,突然你需要它在第二个地方,第三个等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.