Скачиваю файл из интернета и мне нужно отображать при этом прогресс скачивания на форме. После скачивания прогрессбар должен быть спрятан. Проблема в том, что никак не могу добиться того, чтобы после завершения таска компонент с прогрессбаром прятался.
private void fPreTrain_Load(object sender, EventArgs e)
{
this.TopMost = true;
Application.DoEvents();
string path = Application.StartupPath + @"\vids\warmup.mp4";
axWindowsMediaPlayer1.URL = path;
if (!File.Exists(path))
{// Файла нет, качаем
layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
string clean_path = Path.GetDirectoryName(path);
if (!Directory.Exists(clean_path))
Directory.CreateDirectory(clean_path);
try
{
Task.Run(() => Classes.HttpManager.DownloadFile(
"https://hardworkandsweat.com//content/videos/warmup.mp4", path, progressDownload));
}
catch
{
layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
if (Classes.MyForm.Show("Ошибка","Не получилось скачать файл разминки. Открыть видео в браузере?", Classes.MyForm.ftypes.Warning) == DialogResult.Yes);
System.Diagnostics.Process.Start("https://hardworkandsweat.com//content/videos/warmup.mp4");
return;
}
layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
axWindowsMediaPlayer1.Ctlcontrols.play();
}
else
axWindowsMediaPlayer1.Ctlcontrols.play();
}
Если использовать task.wait , то скачивание идёт в фоне, форма не отображается. Если использовать цикл, в котором проверять статус выполнения таска - та же проблема. Нужно и качать и отображать
Попробуйте так:
private async void fPreTrain_Load(object sender, EventArgs e)
{
this.TopMost = true;
string path = Application.StartupPath + @"\vids\warmup.mp4";
axWindowsMediaPlayer1.URL = path;
if (!File.Exists(path))
{// Файла нет, качаем
layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
string clean_path = Path.GetDirectoryName(path);
if (!Directory.Exists(clean_path))
Directory.CreateDirectory(clean_path);
try
{
await Task.Run(() => Classes.HttpManager.DownloadFile(
"https://hardworkandsweat.com//content/videos/warmup.mp4", path, progressDownload));
}
catch
{
layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
if (Classes.MyForm.Show("Ошибка","Не получилось скачать файл разминки. Открыть видео в браузере?", Classes.MyForm.ftypes.Warning) == DialogResult.Yes);
await Task.Run(() => System.Diagnostics.Process.Start("https://hardworkandsweat.com//content/videos/warmup.mp4")(;
return;
}
layoutControlItem2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
axWindowsMediaPlayer1.Ctlcontrols.play();
}
else
axWindowsMediaPlayer1.Ctlcontrols.play();
}
Возможно, надо перед await
на DownloadFile
показать нужный контрол, а после скрыть (я не знаю, что какой контрол делает в вашем коде).
Проблема в том, что Task.Run
создаёт задание, но не дожидается его окончания. Синхронное ожидание окончания задания вешает UI, так что используйте асинхронное, через await
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть форма, которая загружается около 3 секундЧто бы пользователь не видел как она отрисовывается я накрыл всю форму элементом panel и выключаю...
Имеется вращающийся глобус, где при наведении на определенные страны, те подсвечиваютсяПроблема в том, что мне надо, чтобы на задней части...
При изучении ES-2015 я наткнулся на деструктуризацию и мой пытливый ум решил поэкспериментировать