Как синхронизировать progressbar и WebClient.DownloadFileAsync?

Есть вот такой код:

using System.ComponentModel;
using System.Net;
using System.Net.Mime;
using ShellProgressBar;

class Program
{
    static void Main()
    {
        Download();
    }

    static void Download()
    {
        const int totalTicks = 100;
        
        var options = new ProgressBarOptions
        {
            ProgressCharacter = '─',
            ProgressBarOnBottom = true
        };
        
        using (WebClient wc = new WebClient())
        {
            var pbar = new ProgressBar(totalTicks, "Initial message", options);
            wc.DownloadProgressChanged += (s, e) => { pbar.Tick(e.ProgressPercentage,"Download XML Plugin..."); };
            wc.DownloadFileAsync(new Uri("http://dev.osel.pp.ua/Consulo/Plugins/com.intellij.xml_2961.zip"),"/home/ketronix/xml.tar.gz");
            Console.ReadKey();
        };
    }
}

Он то работает, но я хочу чтобы по окончанию загрузки программа прекращала работу. Если другими словами - сейчас программа после загрузки ждет нажатия enter чтобы закрытся, как дальше нет никакого кода, можно сделать так чтобы она не ждала энтер, и если дальше кода нет, она вырубалась? А если код есть - продолжала работать? Всем спасибо.


Ответы (1 шт):

Автор решения: aepot

Если в лоб решать, то как-то так. Всегда решение подобных задач начинайте с чтения документации.

class Program
{
    static async Task Main()
    {
        await DownloadAsync();
    }

    static async Task DownloadAsync()
    {
        var options = new ProgressBarOptions
        {
            ProgressCharacter = '─',
            ProgressBarOnBottom = true
        };
        
        using (WebClient wc = new WebClient()) 
        {
            var pbar = new ProgressBar(totalTicks, "Initial message", options);
            wc.DownloadProgressChanged += (s, e) => { pbar.Tick(e.ProgressPercentage,"Download XML Plugin..."); };
            await wc.DownloadFileTaskAsync(new Uri("http://dev.osel.pp.ua/Consulo/Plugins/com.intellij.xml_2961.zip"),"/home/ketronix/xml.tar.gz");
        };
    }
}

Имейте в виду, WebClient устарел и будет убран из .NET в будущем. Если интересует более современное решиение, то вот так.

→ Ссылка