c# - 我如何知道已完成的活动中下载了哪些文件?
问题描述
private async void BtnDownloadFile_Click(object sender, RoutedEventArgs e)
{
btnDownloadFile.IsEnabled = false; // Disable to prevent multiple runs
using (System.Net.WebClient wc = new System.Net.WebClient())
{
wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36");
wc.DownloadProgressChanged += OnDownloadProgressChange;
wc.DownloadFileCompleted += OnDownloadFileComplete;
stopwatch.Start();
await DownloadAsync(wc);
}
}
private void OnDownloadProgressChange(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
// Calculate progress values
string downloadProgress = e.ProgressPercentage + "%";
string downloadSpeed = string.Format("{0} MB/s", (e.BytesReceived / 1024.0 / 1024.0 / stopwatch.Elapsed.TotalSeconds).ToString("0.00"));
string downloadedMBs = Math.Round(e.BytesReceived / 1024.0 / 1024.0) + " MB";
string totalMBs = Math.Round(e.TotalBytesToReceive / 1024.0 / 1024.0) + " MB";
// Format progress string
string progress = $"{downloadedMBs}/{totalMBs} ({downloadProgress}) @ {downloadSpeed}"; // 10 MB / 100 MB (10%) @ 1.23 MB/s
// Set values to contols
lblProgress.Content = progress;
progBar.Value = e.ProgressPercentage;
}
private async void OnDownloadFileComplete(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
lblProgress.Content = "Download complete!";
stopwatch.Reset();
btnDownloadFile.IsEnabled = true;
if(e.Error == null)
{
urlsCounter--;
lblMumberOfFiles.Content = urlsCounter;
if (e.UserState.ToString().Contains("Radar"))
{
drawonimage.DrawText(datesonimages[0].ToString(), @"d:\Downloaded Images\Radar\radImage6.gif");
}
}
if (extractOnce == false)
{
radar.GetRadarImages();
await Task.Delay(5000);
for (int i = 0; i < radar.links.Count; i++)
{
urls.Add(radar.links[i]);
}
dates = radar.dates;
foreach(var date in dates)
{
datesonimages.Add(date.ToString("ddd, dd MMM yyy HH':'mm"));
}
ExtractLinks();
extractOnce = true;
}
}
在 OnDownloadFileComplete 事件中,我想知道哪些文件已下载好且没有任何错误,然后对此图像文件进行一些操作。
以这种方法下载图像时,我知道文件是否是雷达:但是我想要对图像进行的操作是在下载每个已成功下载的“雷达”时,我想从OnDownloadFileComplete 事件中的硬盘。我不确定如何在 OnDownloadFileComplete 事件中找到每个下载的图像文件的“雷达”。
int countRad = 0;
int countSat = 0;
private async Task DownloadAsync(WebClient Client)
{
for (int i = 0; i < urls.Count; i++)
{
stopwatch.Start();
string extractFile = textBoxSatelliteFolder.Text + "\\extractFile.txt";
string fNameRad = textBoxRadarFolder.Text + "\\radImage" + countRad + ".gif";
string fNameSat = textBoxSatelliteFolder.Text + "\\satImage" + countSat + ".gif";
if (urls[i] == "https://myimage.com/")
{
await Client.DownloadFileTaskAsync(new Uri(urls[i]), extractFile);
}
else
{
if (urls[i].Contains("Radar"))
{
await Client.DownloadFileTaskAsync(new Uri(urls[i]), fNameRad);
countRad++;
}
else
{
await Client.DownloadFileTaskAsync(new Uri(urls[i]), fNameSat);
countSat++;
}
}
}
}
解决方案
推荐阅读
- python - Python 没有将我的包视为包
- css - 我应该如何让我的项目对 CSS 做出响应?
- python - 使用 pyinstaller 将腌制的 sklearn 模型编译为 EXE 文件,无需导入 Sklearn 模块
- python - 如何使用当前设置获得 JSON 文件?
- python - Python 无法访问列表
- android - 如果我的应用程序在后台,为什么 Android 操作系统不会创建 singleTop 活动的新实例?
- aws-elasticsearch - 两个 AWS ES 集群/域之间的 Amazon Elasticsearch 索引复制?
- javascript - 如何将数据从一个 api 端点传递到 reactjs 中的另一个 api 端点
- python - 如何使用 Pandas 数据框显示如下输出?
- python - 无法使用实现代理的请求从有问题的网页中获取标题