标签文本未更新

ata*_*ata 2 c#

我有一个带有状态栏的Windows窗体,显示当前的应用程序状态.我有一个名为AppState的类,它在状态栏中更新了Label,并在处置它时将状态更改回"Ready".

在代码中我执行的操作如下:

using (AppState state = new AppState("Processing..."))
{
     //Do some work that take some seconds
}
Run Code Online (Sandbox Code Playgroud)

但标签保持不变.我没有任何例外.标签文本已更新,但在UI上,它会一直显示以前的值.我在这里错过了什么吗?

santosc你是对的,这是我唯一做的事情.这是AppState代码

public class AppState : IDisposable
{
    static string Default = "Ready";

    public AppState(string status)
    {
        Form.StatusLabel.Text = status;
    }

    public void Dispose()
    {
        Form.StatusLabel.Text = Default;
    }
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*ver 5

这总是一样的......

如果你想开始需要一段时间的事情,不要在你的GUI线程中执行它,否则你的GUI会冻结(没有标签更新,没有调整大小,没有移动,没有任何东西).

使用Application.DoEvents()在千位上填充代码也是一种不好的做法.

如果您有一些长时间运行的任务(长意味着> 1秒),您应该使用BackgroundWorker.也许它在开始时有点难,但如果你的程序变得更复杂,你会喜欢它.由于这个事实已经有好几次讨论了,这里有一些示例代码链接.

现在您已经知道正确的工具(BackgroundWorker)来解决您的问题,您应该让它工作(或询问有关您的新特定问题的另一个问题).