У меня есть диалог с индикатором прогресса. Фоновый работник должен загружать два файла (с помощью WebClient) и автоматически копировать их в указанное место, когда отображается диалоговое окно. Как дождаться загрузки файлов перед копированием новых файлов.Ждать загрузки для загрузки в BackgroundWorker
Я попытался что-то сделать с await
, но я не могу изменить фонаря на метод async. Как я могу подождать у рабочего для завершения загрузки?
код для запуска работника:
private void fmUpdateingDatabaseDialog_Shown(object sender, EventArgs e)
{
device.Connect();
lbInformation.Text = "uploading database to " + device.FriendlyName;
device.Disconnect();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged +=
new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
}
код в обработчике DoWork (пути не являются пустыми в фактическом коде):
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
//download files temporary
WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileTaskAsync(new Uri(""), Path.Combine(tempPath + ""));
WebClient client2 = new WebClient();
client2.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client2_DownloadProgressChanged);
client2.DownloadFileTaskAsync(new Uri(""), Path.Combine(tempPath + ""));
//upload files to phone
device.Connect();
device.TransferContentToDevice(Path.Combine(tempPath+""), folder.Id, folder, true);
device.TransferContentToDevice(Path.Combine(tempPath+""), folder.Id, folder, true);
device.Disconnect();
}
- ** никогда бы никогда никогда не предлагал Thread.Sleep (любого рода, будь то 0 или 1000) и цикл такого sencario **, скорее пойдите для WaitHandles! (см. мой полный почему/как/... @ http://stackoverflow.com/questions/8815895/why-is-thread-sleep-so-harmful/8815944#8815944) –
Я думал об этом, но это казалось немного грязный для меня. Есть ли у вас ресурсы для подхода async-ожидания? Я не знаю, как запустить асинхронную функцию из события Dialog_shown – j0h4nn3s
@AndreasNiedermair - см. Мое обновление. –