0

я написал программу для скачивания файла в интернете через URL

private static async Task DownloadFileAsync() 
        {
            WebClient client = new WebClient();       
            Console.Write("Enter URL for download file: ");
            var siteAdress = Console.ReadLine();
            Console.Write("Enter file name: ");
            var saveFileName = Console.ReadLine();
        client.DownloadFileTaskAsync(new Uri(siteAdress), saveFileName);

        while (true)
        {
            Console.Write("Your file size: ");
            Console.Write(BytesToString(size));
            Thread.Sleep(100);
            Console.SetCursorPosition(0, 3);
        }

Все что я смог придумать это обернуть все в while(true), но тогда будет бесконечно без перерыва выводить размер файла, а мне бы хотелось чтобы это прекращалось когда размер файла переставал изменяться. Ниже код из интернета для получения размера файла который я нашел.

static String BytesToString(long byteCount) // метод для вывода информации о размере файла
        {
            string[] suf = { "Byt", "KB", "MB", "GB", "TB", "PB", "EB" }; 
            if (byteCount == 0)
                return "0" + suf[0];
            long bytes = Math.Abs(byteCount);
            int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)));
            double num = Math.Round(bytes / Math.Pow(1024, place), 1);
            return (Math.Sign(byteCount) * num).ToString() + suf[place];
        }

1 Answers1

0

Вы можете создать переменную, которая бы хранила Task функции DownloadFileTaskAsync, и проверять в while, является ли Task isCompleted. А также, создать еще один таск, который бы выполнялся с интервалом в пять секунд, и выводил бы, сколько уже скачано.

Более подробнее про Task на MSDN

P.S. Про еще один таск бред какой - то написал, вот как решили задачу с периодическим вызовом: Коллеги на английском StackOverflow

hunterlan
  • 163