複数のアップロードの進行状況を報告するのに問題があります。現時点では、モック データを生成し、アップロードは各ループで 0 から 100 までの単純な for ループ カウントを伴うバックグラウンド ワーカーです。アップロードを実現するために、2 つのオブジェクト タイプを使用しています。各ファイル (uploadFileObj) のアップロード オブジェクトのリストを含む、アップロード全体 (transferObj) 用の 1 つ。uploadFileObj にはバックグラウンド ワーカーが含まれています。進行状況を報告するには、uploadFileObj の現在の進行状況プロパティをさまざまな進行状況バーにバインドするだけです。アップロード全体に対して 1 つの進行状況バーと、非同期にアップロードされた各ファイルに対して 1 つの進行状況バー。
アップロードファイルオブジェクト:
_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 スレッドが停止します。
なぜそれが起こるのですか?