0

我在报告多个上传的进度时遇到了一些麻烦。目前我生成模拟数据,上传是一个后台工作人员,每个循环都有一个简单的 for 循环计数,从 0 到 100 延迟。为了实现上传,我使用了两种对象类型。一个用于整个上传 (transferObj),其中包含每个文件 (uploadFileObj) 的上传对象列表。uploadFileObj 包含背景工作者。为了报告进度,我只需将uploadFileObj 的当前进度属性绑定到不同的进度条。一个进度条用于整个上传,一个进度条用于每个异步上传的文件。

上传文件对象

 _backGroundWorker = new BackgroundWorker();
        _backGroundWorker.WorkerSupportsCancellation = true;
        _backGroundWorker.WorkerReportsProgress = true;

        _backGroundWorker.DoWork += (sender, e) =>
        {
            for (int k = 0; k <= 100; k++)
            {
                while (DoPause)
                {
                    Thread.Sleep(100);
                }

                System.Threading.Thread.Sleep(sleep);
                (sender as BackgroundWorker).ReportProgress(k);
            }
        };
        _backGroundWorker.ProgressChanged += (sender, e) =>
        {
            this.CurrentProgress = e.ProgressPercentage;
        };
        _backGroundWorker.RunWorkerCompleted += (sender, e) =>
        {
            if ((e.Cancelled == true))
                Console.WriteLine("Canceled!");
            else if (!(e.Error == null))
                Console.WriteLine("Error: " + e.Error.Message);
            else
            {
                IsFinished = true;
            }
        };

        _backGroundWorker.RunWorkerAsync();

到目前为止一切正常。每个文件和整个上传的进度将在 UI 线程中报告。但是,当我在托管进度条的自定义控件上添加 png 图像时,UI 线程会停止,直到所有后台工作人员完成。

为什么会这样?

4

0 回答 0