7

我正在设计一个 GUI,并且我有一个标签,在我调用一个往往需要一段时间的操作后,我可以有效地将其用作“请稍候”消息。标签的文本是静态的,我在VS2010的属性中设置了标签控件。

当我在表单上点击该操作时,我 .Show() 通常隐藏的控件,直到耗时的过程完成,然后 .Hide() 它。当它点击 .Show() 时,标签会弹出(我知道这一点,因为我将 BorderStyle 设置为 Fixed3D,所以我看到标签的边框出现了),但其中没有任何文字。我尝试将标签设置为自动调整大小但无济于事,我的文本设置为灰色上的黑色,因此没有隐形墨水,一切都可见,字体已设置。代码按照我的意愿执行,标签中没有文本。我不知所措。

有任何想法吗?

4

3 回答 3

12

如果耗时过程发生在同一线程上,则可能是刷新/重绘问题(处理器太忙而无法处理 UI 请求)。尝试在启动长时间运行的进程之前刷新窗口,或者更恰当地,将耗时的进程放在 BackgroundWorker 中。

于 2012-10-25T21:06:34.100 回答
6

如果耗时过程未在后台线程中执行,则您的 UI 不会更新,因为没有进行消息处理。控件在 WM_Paint 消息中重绘自己。

在更改其状态后,尝试在控件或其窗口句柄父级(窗体)上调用 Refresh,然后再进入漫长的过程。

或者,将长时间运行的进程移至后台线程(请参阅 .NET 4.0 任务)以释放 UI 线程。

于 2012-10-25T21:06:47.470 回答
3

也许我错过了一些东西,但你为什么不直接设置label.Visible

于 2012-10-25T21:03:51.943 回答