Хочу сделать скачивание файла с Mega.nz с прогресс баром. Я могу скачать файл, но как добавить прогресс бар... Ничего не понимаю. Вот API https://gpailler.github.io/MegaApiClient/articles/faq.html
Обновлять прогресс можно так, как показано в примере кода.
_progressBar.Maximum = 1000;
и (int)(value * 10d);
могут быть заменены на _progressBar.Maximum = 100;
и (int)(value);
Можно использовать стандартный дотнетовский Progress<T>
класс. Я написал свой, так как не знал о его существовании, подсказали в комментариях.
using System;
using System.Threading;
namespace FileDownloader
{
public class Progress : IProgress<double>
{
private readonly SynchronizationContext _synchronizationContext;
public event EventHandler<double> ProgressUpdated;
public Progress()
{
_synchronizationContext =
SynchronizationContext.Current ?? new SynchronizationContext();
}
public void Report(double value)
{
_synchronizationContext.Post(state =>
{
ProgressUpdated?.Invoke(this, value);
}, null);
}
}
}
using System;
using System.Diagnostics;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;
using CG.Web.MegaApiClient;
namespace FileDownloader
{
public partial class MainForm : Form
{
// ...
private readonly Progress _progress;
public MainForm()
{
InitializeComponent();
// ...
_progress = new Progress();
_progress.ProgressUpdated += OnProgressUpdated;
_progressBar.Minimum = 0;
_progressBar.Maximum = 1000;
}
private void OnProgressUpdated(object sender, double value)
{
updateProgress(value);
}
private async void DownloadButtonClick(object sender, EventArgs e)
{
// Лучше добавить ещё код вида:
// если скачивание запущено, то выйти из метода.
// Этот код нужно добавить, даже если кнопка
// выключается на время скачивания.
// А то иногда мелькают вопросы: "как сделать
// неактивную кнопку активной?"
// ...
await _client.LoginAnonymousAsync();
// ...
try
{
await client.DownloadFileAsync(fileLink, node.Name, _progress/*, _cancellation.Token*/);
}
catch (OperationCanceledException ex)
{
updateProgress(0d);
Debug.WriteLine(ex.Message);
}
finally
{
// ...
}
}
private void updateProgress(double value)
{
_percentageLabel.Text = ((int)value).ToString(CultureInfo.InvariantCulture) + "%";
_progressBar.Value = (int)(value * 10d);
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Существуют ли наработанные подходы к интеграции отладки в код?
как компилировать программу wpf без студии? пишу в консоли:
Всем привет, решил написать программу для обработки донатов на donationalerts, работают они через виджет в виде страницы и через F12 я понял что получают...
Всем привет, прошу помочь в решение очень сложного вопроса (Мучаюсь с ним уже 4 дня)