当我点击按钮运行我的代码时,我的win表单会锁定并且我的进度条不会运行。我做错了什么?
foreach (string barcount in idit)
{
barcountmax++;
}
label2.Text = "Total entries: " + barcountmax;
progressBar1.Minimum = 0;
progressBar1.Maximum = barcountmax;
...
foreach (string ids in idit)
{
string[] splitids = ids.Split('|');
string fixcommacrap = "";
barmovement++;
progressBar1.Value = barmovement;
}
我的Winform只是锁定和冻结,我无法看到进度条。
答案 0 :(得分:5)
我的猜测是你正在UI线程中完成所有工作。不要那样做。
使用BackgroundWorker
进行工作,定期更新进度条,使用ReportProgress
允许在UI线程中进行UI更改。
如果你搜索BackgroundWorker
教程,你会找到很多教程,例如this one。许多人会使用进度条给出示例,因为BackgroundWorker
几乎是针对该场景设计的。
答案 1 :(得分:1)
默认情况下,如果您正在运行长操作,则winform不会自行重绘。要解决它,请考虑:
(1)。
答案 2 :(得分:1)
要使其工作,您需要在必要时让表单绘制。正确/首选的方法是使用工作线程(可能是BackgroundWorker)来执行长时间运行的任务,定期回调UI线程,要求它更新进度。
还有DoEvents,但(坦率地说)是黑客攻击。
答案 3 :(得分:1)
解决问题的最简单但不正确的方法是在循环中使用以下内容:
Application.DoEvents();
更具挑战性的是使用单独的线程进行计算,使用当前的UI线程来更新进度条。
答案 4 :(得分:0)
根据建议,使用BackGroundWorker。
在worker中,不要直接更新ProgressBar,而是使用BeginInvoke。