Консоль прогресса C # - PullRequest
0 голосов
/ 07 мая 2019

Здравствуйте, поэтому мне нужно было иметь индикатор выполнения в консольном приложении C # при загрузке файлов с FTP, но это было слишком сложно для меня, поэтому я использовал уже готовый API и библиотеки.

Я использую FluentFTP: https://github.com/robinrodricks/FluentFTP#faq_progress И функция консоли прогрессбар от: https://gist.github.com/co89757/5ae15bf61a62f82f9abd32a285f0c76a

Я сделал что-то вроде этого:


        //Download files from FTP, return true or false if succed
        public static void DownloadFileFromFTP(string ip, string RemoteFilePath, string LocalFilePath, string username, string password)
        {

             FtpClient client = new FtpClient(ip);
             client.Credentials = new NetworkCredential(username, password);
             client.Connect();

            using (var progress = new ProgressBar())
            {

                   client.DownloadFile(LocalFilePath, RemoteFilePath, FtpLocalExists.Overwrite, FluentFTP.FtpVerify.Retry, progress);

            }

        }

Нет проблем с функцией на всех работах, как ожидалось. Проблема с прогрессбаром, который просто поворачивается на 100% очень быстро, я не загружал, может быть, 5% файла, а прогрессбар показывает 100%.

Я получил какую-либо документацию неправильно или кто-то может помочь, где проблема?

Спасибо

John

1 Ответ

0 голосов
/ 07 мая 2019

То, что вы делаете, - это итерация цикла for 100 раз и загрузка его столько раз. То, что вам нужно сделать, это создать индикатор выполнения, установив для minimun значение 0, а для maximun значение 100. Затем вам нужно определить функцию обратного вызова, которая обновляет ваш прогресс при каждом вызове (в соответствии с документацией, это выполняется с помощью предоставленной функции)

Для краткости необходимо добавить следующее (скопировано из документации, которую вы связали)

и ваш метод должен выглядеть так

        //Download files from FTP, return true or false if succed
    public static void DownloadFileFromFTP(string ip, string RemoteFilePath, string LocalFilePath, string username, string password)
    {
         ProgressBar progressBar = new ProgressBar();

         Progress<double> progress = new Progress<double>(x => {
           if (x > 0)
           {
             progressBar.Report((double) x / 100);
           }   
         });
         FtpClient client = new FtpClient(ip);
         client.Credentials = new NetworkCredential(username, password);
         client.Connect();
         progressBar = new ProgressBar();
         client.DownloadFile(LocalFilePath, RemoteFilePath, FtpLocalExists.Overwrite, FluentFTP.FtpVerify.Retry, progress);
         progressBar.Dispose();
    }
...