在我正在编写的应用程序中,我必须在按下某个按钮后在列表视图中加载大量数据。因为这可能需要一段时间,我想向用户显示一个简单的加载屏幕。 我通过创建一个带有1个标签的非常简单的表单来做到这一点。我在开始获取数据之前执行Form.Show(),并在完成后执行Form.Close()。这部分工作:我得到加载屏幕,它在正确的时间关闭,但你可以看到标签没有显示。
我知道我应该在BackgroundWorker的帮助下编写这个loagind屏幕问题,但我不是一个非常有经验的C#程序员,所以如果我能以某种方式强制标签显示我会非常高兴。
是否可以立即强制显示此标签,还是必须找到其他解决方案?
答案 0 :(得分:3)
由于加载过程占用了所有资源,因此UI消息泵没有时间更新标签/刷新屏幕。
您可以尝试通过调用Application.DoEvents()
来强制更新标签。虽然,使用'Application.DoEvents'是一种'代码嗅觉',因此表明设计并不那么好。所以,应该避免。
因此,使用DoEvents肯定不是解决此问题的最佳方法。它只是一种症状修复。
您自己已经提到了最佳解决方案:使用另一个线程来加载所有数据。 (你确实可以使用BackGroundWorker
来实现这个目的,因为这会抽象掉许多管道代码。)
答案 1 :(得分:3)
BackgroudWorker非常易于使用,即使c#非常强大且简单的语言
我几乎可以肯定,你不需要BackGroundWorker的任何帮助,但如果你有任何疑问,你总能在SO上发帖? Collabartive Intelligence是什么SO?