0

複数のアップロードの進行状況を報告するのに問題があります。現時点では、モック データを生成し、アップロードは各ループで 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 スレッドが停止します。

なぜそれが起こるのですか?

4

0 に答える 0