【问题标题】:C# Label not showing at loading screenC# 标签未在加载屏幕上显示
【发布时间】:2010-12-07 08:32:28
【问题描述】:

在我正在编写的应用程序中,我必须在按下某个按钮后在列表视图中加载大量数据。因为这可能需要一段时间,所以我想向用户显示一个简单的加载屏幕。 我通过创建一个带有 1 个标签的非常简单的表单来做到这一点。我在开始获取数据之前执行了 Form.Show() ,并在完成后执行了 Form.Close() 。这部分工作:我得到加载屏幕,它在正确的时间关闭,但你可以看到标签没有显示。

我知道我应该在 BackgroundWorker 的帮助下编写这个登录屏幕问题,但我不是一个非常有经验的 C# 程序员,所以如果我能以某种方式强制显示标签,我会非常高兴。

是否可以强制此标签立即显示,还是我必须找到其他解决方案?

【问题讨论】:

  • 可能是个愚蠢的问题,但是——你设置 label1.Visible = true 了吗?它是否位于可以看到的窗口的一部分?文字颜色和背景颜色一样吗?

标签: c# screen loading


【解决方案1】:

UI 消息泵没有时间更新标签/刷新屏幕,因为加载过程占用了所有资源。

您可以尝试通过调用Application.DoEvents() 来强制更新标签。虽然,使用“Application.DoEvents”是一种“代码气味”,因此表明设计不是那么好。所以,应该避免。

因此,使用 DoEvents 肯定不是解决此问题的最佳方法。这只是一种症状修复。

您自己已经提到了最佳解决方案:使用另一个线程来加载所有数据。 (您确实可以为此目的使用BackGroundWorker,因为这会抽象出很多管道代码)。

【讨论】:

  • Application.DoEvents() 是要避免的。
  • 我完全同意。这就是为什么我说这不是最好的解决方案,应该首选后台工作人员。
  • 我仍然打算使用简单的解决方案,即 Application.DoEvents() 方法,它可以满足我的要求。这是一个非常简单的程序,没有很多行。使用上面提到的方法可能不是很专业,但它也不是一个很专业的应用程序;)。感谢您的解决方案 Frederik,尽管我觉得您会因为给出它而感到难过:)。
【解决方案2】:

BackgroudWorker 非常好用,连c#都非常强大和简单的语言

See Here

我几乎可以肯定,您不需要更多有关 BackGroundWorker 的帮助,但是如果您有任何疑问,您可以随时在 SO 上发帖吗?协作智能是什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多