繁体   English   中英

为什么调用 refresh() 是一种滥用?

[英]Why is it an abuse to call refresh()?

就像在这个例子中一样:

someImage.Source = newSource;
someImage.refresh();

几天前,在这篇文章中,我回复了 refresh(),我收到反馈说这是一种黑客/滥用行为。 我不明白为什么。

MSDN 有答案。

控制. Control.Refresh

强制控件使其客户区无效并立即重绘自身和任何子控件。

控制. Control.Invalidate

使控件的整个表面无效并导致控件被重绘。 [...]调用 Invalidate 方法不会强制同步绘制

[强调我的]

关键是RefreshInvalidate不同,它强制进行同步调用,这有效地中断了 forms 中的默认事件流并切断了消息队列中的行。 这可能会导致其他 window 消息(来自操作系统的事件)被延迟。

如果您有响应式用户界面,则根本不需要Refresh方法调用。 设置Source属性会创建一条消息,使控件的显示无效,因此在处理该消息时将自动刷新。

只有当您的代码包含一个长时间运行的循环,因此它在很长一段时间内根本不处理消息时,您才需要使用Refresh方法。 应避免如此长时间的运行循环,因为它会导致用户界面无响应。

通过简单的话Refresh()将重新加载 UI,当一些变化

因为如果您正确使用它们,大多数 gui 框架会自动处理刷新/更新。

通过刷新,您可以解决症状(某些内容不会自动更新),而不是解决根本原因。

问题是刷新通常开始像病毒一样传播。 你将它插入一个地方,突然你需要它在第二个地方,第三个等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM