我在报告多个上传的进度时遇到了一些麻烦。目前我生成模拟数据,上传是一个后台工作人员,每个循环都有一个简单的 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 线程会停止,直到所有后台工作人员完成。
为什么会这样?