我在XAML中有Windows窗体,其中包含进度条。生成线程,运行作业,并使用进度条显示作业的状态。
它工作正常,但我也希望限制一次可以运行的作业数量。
protected int executingThreads = 0;
int maxThreadCount = 3;
object lockObj = new object();
public virtual void start()
{
inqueue = new Queue<XElement>();
LoadQueue();
while (inqueue.Count != 0)
{
XElement request = inputqueue.Dequeue();
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(DoWork), request);
/* lock (lockObj)
{
executingThreads++;
while (executingThreads == maxThreadCount)
Thread.Sleep(1);
} */
}
/* while (executingThreads != 0)
Thread.Sleep(1); */
}
为了限制一次运行的作业数量,我添加了此处显示的代码,其中包含锁定和睡眠。这似乎限制了一次运行的作业数量,并且所有作业都成功完成。
但ProgressBar不再逐步显示更新 - 直到所有作业完成,然后所有内容都显示为已完成。我假设睡眠阻止ProgressBar UI刷新。我该如何解决这个问题? 解决方案Application.DoEvents()?