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

时间:2011-05-04 17:02:19

标签: c# .net refresh

就像这个例子一样:

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

几天前在this帖子中,我回复了refresh(),我得到的反馈是黑客/滥用。我不明白为什么。

4 个答案:

答案 0 :(得分:3)

MSDN有答案。

Control.Refresh

  

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

Control.Invalidate

  

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

[强调我的]

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

答案 1 :(得分:2)

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

只有当你的代码包含一个长时间运行的循环时,它才会长时间处理消息,你需要使用Refresh方法。应该避免这种长时间运行的循环,因为它会导致用户界面无响应。

答案 2 :(得分:0)

通过简单的单词Refresh()将重新加载UI,当某些更改

答案 3 :(得分:0)

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

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

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