【发布时间】:2015-01-16 13:47:03
【问题描述】:
我有一个带有进度条的对话框。显示对话框时,Backgroundworker 应下载两个文件(使用 WebClient)并自动将它们复制到指定位置。 如何在复制新文件之前等待文件下载。
我试图用await 做一些事情,但我无法将Backgroundworker 更改为异步方法。如何在工作器中等待下载完成?
运行worker的代码:
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();
}
【问题讨论】:
标签: c# asynchronous backgroundworker webclient