首页 > 解决方案 > 我如何知道已完成的活动中下载了哪些文件?

问题描述

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++;
                    }
                }
            }
        }

标签: c#wpf

解决方案


推荐阅读