我有一个带有状态栏的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)
这总是一样的......
如果你想开始需要一段时间的事情,不要在你的GUI线程中执行它,否则你的GUI会冻结(没有标签更新,没有调整大小,没有移动,没有任何东西).
使用Application.DoEvents()在千位上填充代码也是一种不好的做法.
如果您有一些长时间运行的任务(长意味着> 1秒),您应该使用BackgroundWorker.也许它在开始时有点难,但如果你的程序变得更复杂,你会喜欢它.由于这个事实已经有好几次讨论了,这里有一些示例代码的链接.
现在您已经知道正确的工具(BackgroundWorker)来解决您的问题,您应该让它工作(或询问有关您的新特定问题的另一个问题).
| 归档时间: |
|
| 查看次数: |
9440 次 |
| 最近记录: |