Как синхронизировать 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 в будущем. Если интересует более современное решиение, то вот так.