Этот BackgroundWorker утверждает, что не сообщает о прогрессе - PullRequest
0 голосов
/ 01 июня 2019

Где моя ошибка?Я думаю, что все в порядке, но все же я вижу это исключение:

Exception {"Этот BackgroundWorker заявляет, что он не сообщает о прогрессе. Измените WorkerReportsProgress, чтобы указать, что он действительно сообщает о прогрессе."}. Исключение было выброшенов _worker.ReportProgress ((int) (progressPercentage * 100)).

Может кто-нибудь порекомендовать мне ftp-сервер с богатыми данными для тестовой загрузки и выгрузки?

Вот мой код:

    this._worker = new BackgroundWorker();

    this._worker.WorkerSupportsCancellation = true;
    this._worker.WorkerSupportsCancellation = true;

    this._worker.ProgressChanged += backgroundWorker1_ProgressChanged;
    this._worker.DoWork += backgroundWorker1_DoWork;

using (FileStream fs = new    FileStream(Path.Combine(this._ftpInfo.SaveDirectory, this._ftpInfo.FileName), FileMode.CreateNew, FileAccess.Write))
                    {


                byte[] buffer = new byte[1024];
                    int len;
                    int byteTotal = 0;

                    while ((len = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        await fs.WriteAsync(buffer, 0, len);
                        byteTotal += len;
                        double index = (double)(byteTotal);
                        double total = (double)buffer.Length;
                        double progressPercentage = (index / total);
                        _worker.ReportProgress((int)(progressPercentage*100));

                    }
                    fs.Close();

1 Ответ

1 голос
/ 01 июня 2019

У вас есть эта строка дважды:

this._worker.WorkerSupportsCancellation = true;

Один из них, вероятно, должен был быть:

this._worker.WorkerReportsProgress = true;

В качестве примечания, рассмотрим , используя Task.Run сIProgress<T> вместо BackgroundWorker.Полученный код будет короче и более безопасен для типов.

...