c# - Windows 窗体在进度条处冻结?
问题描述
好的,所以我已经构建了我的表单应用程序,它有一个循环,使进度条上升,但这里的问题是,当它上升时,窗口没有移动或响应,我仍然可以看到进度酒吧更改,除非完成,否则我无法关闭它或任何东西。这有点烦人,因为我不希望它在测试时冻结,或者在进度条完成之前有一个不工作的应用程序。这是我的代码:
private void Form1_Load(object sender, EventArgs e)
{
progressBar2.Minimum = 1;
progressBar2.Maximum = nummax;
}
private void timer2_Tick(object sender, EventArgs e)
{
for (int i = 1; i <= nummax; i++)
{
if (i != nummax && !enabled)
{
int percent;
percent = i / nummax;
string ab = percent.ToString();
progress.Text = ab;
Thread.Sleep(50);
progressBar2.Value = i;
}
}
if (progressBar2.Value == nummax || enabled || progressBar2.Value >= nummax - 30)
{
progress.Text = "Completed!";
progressBar2.Minimum = 1;
progressBar2.Maximum = 2;
enabled = true;
}
}
解决方案
删除那个Thread.Sleep(50)
添加progressBar2.Refresh()
或未能使用
progressBar2.PerformStep()
系统正忙于处理,它没有时间将 Windows 消息刷新到控件。
推荐阅读
- line - 如果我们给出上一行中的单词,如何打印下一行
- sql - 查询根据关系和约束更新记录计数
- node.js - 从路由 nodejs 将变量发送到 js 文件
- three.js - 是否可以在threejs编辑器中重用材料
- java - 如何实时更新 TextArea 的输入?
- angular - 访问 mat-row Angular Material Table 中的组件实例
- java - 使用对象输入流。当我使用 readObject() 方法时,它给了我一个名为 EOFException 的异常
- r - 在 R markdown notebook 中打印或保留每次循环运行的输出
- python - 根据值替换字典中的键
- javascript - 光滑的滑块和汉堡菜单冲突