我在报告多次上传的进度方面遇到了一些麻烦。目前我生成了模拟数据,上传是一个后台工作者,在每个循环中有一个简单的for循环计数从0到100延迟。为了实现上传,我使用了两种对象类型。一个用于整个上传(transferObj),其中包含每个文件的上传对象列表(uploadFileObj)。 uploadFileObj包含背景工作者。要报告进度,我只需将uploadFileObj的当前progress属性绑定到不同的progressbars。 整个上传的一个进度条和每个上传异步的文件的一个进度条。
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线程会停止,直到所有后台工作程序都完成。
为什么会这样?