【问题标题】:An effective way to display multiple labels显示多个标签的有效方法
【发布时间】:2013-10-08 21:19:41
【问题描述】:

我正在寻找一种有效、快速的方式来快速显示多个标签。除了一个接一个地替换标签的所有 .text 属性之外,还有什么好方法呢?我的理解是,每当您更新 .text 属性时,都必须重新绘制 UI,如果您有 50 多个要更新的控件,这将增加延迟。

我知道线程是一个选项,但是当我尝试这个时,我并没有看到太大的不同,因为我无法一次加载 2 个标签,我仍然需要等待 UI 线程才能更新标签.还有什么其他方法可以快速有效地加载 50 多个标签?现在的方式需要相当长的时间(3-4s),我觉得这可以降低。信息是从后端系统获取的,所以我没有数据集/等的选项。

【问题讨论】:

  • 你能发布你的代码吗? 3-4 秒对于 50 个标签来说听起来太慢了。
  • 你是说后端需要 3-4 秒来为标签提供数据?
  • 我无法发布代码,实际上只是从后端获取它的代码。我不确定是否有办法加快这个过程。如果是由于后端或连接到后端的代码,我可能无法控制它,只是尝试一些事情:)
  • 如果问题是从后端获取数据,您应该将解决问题(以及此处的问题)的解决方案集中在这部分。更新许多标签的值并不是什么大问题(只需更改相应的 .Text 属性)。您的问题是尽快检索数据,但如果我们对此一无所知,我们无法提供这方面的建议。

标签: vb.net multithreading winforms


【解决方案1】:

您必须分离从数据库中检索数据的代码(您使用后台线程执行此操作)和更新 UI 的代码(这应该尽快发生,因为您不想阻塞 UI太长了)。

我的建议是使用 BackgroundWorker 组件来检索所有 50 个标签的数据。当 BackgroundWorker 引发 RunWorkerCompleted 事件时,您调用表单的 SuspendLayout 函数,更新标签的所有值,然后调用 ResumeLayout。在调用 ResumeLayout 之前,SuspendLayout 会阻止控件重绘。

更多信息:BackgroundWorkerSuspendLayoutResumeLayout

【讨论】:

  • 我已尝试实现此方法,但遇到一些问题,即应用程序在遇到 RunWorkerCompleted 事件时立即崩溃。在 Visual Studio 中的任何地方是否有任何崩溃的痕迹,我可以看到导致崩溃的原因?这显然是由于一些跨线程问题,但我不确定在哪里
  • 在 RunWorkerCompleted 事件中放置一个断点并单步执行您的代码。
猜你喜欢
  • 2022-01-24
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多