C#从Thread更新ProgressBar

时间:2014-06-26 00:35:46

标签: c# multithreading progress-bar

我在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()?

0 个答案:

没有答案