[英]How do I use the WebClient progresschanged event from within backgroundworker dowork event?
[英]I'm using a webclient to download files inside a backgroundworker's “DoWork”
我猜只能使用Web客戶端。
但是現在我正在使用BackgroundWorker
線程和Web客戶端來下載文件。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var v = lines.Where(s => s.Contains("Name")).Select(s => s.Substring(15));
var q = lines.Where(s => s.Contains("Code")).Select(s => s.Substring(15));
var r = q.Where(c => c == "is").Concat(q.Where(c => c != "is"));
var p = v.Where(c => c == "Israel").Concat(v.Where(c => c != "Israel"));
var n = r.Count();
int i = 0;
var results = p.ToList();
using (var client = new WebClient())
{
foreach (var c in r)
{
string filesPath = defaultPath + "\\Countries" + "\\" + results[i] + "\\" + results[i] + ".gif";
Uri uri = new Uri("http://api.sat24.com/animated/" + c + "/infraPolair/1/JerusalemStandardTime/1897199");
client.DownloadFile(uri, filesPath);
backgroundWorker1.ReportProgress(i * 100 / n, results[i]);
++i;
}
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
try
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = e.ProgressPercentage.ToString() + "%";
label2.Text = e.UserState.ToString();
}
catch (Exception ex)
{
string ttt = ex.ToString();
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
progressBar1.Value = 100;
}
else
{
}
}
private void timer1_Tick(object sender, EventArgs e)
{
DirectoryInfo dir1 = new DirectoryInfo(@"C:\Users\Chocolade\AppData\Local\SatellitesImagesDownloads\SatellitesImagesDownloads\Countries\");
fi = dir1.GetFiles("*.gif", SearchOption.AllDirectories);
foreach (FileInfo finfo in fi)
{
if (fi.Length > 0 && finfo.Length > 0)
{
timer1.Enabled = false;
pictureBox1.Load(finfo.FullName);
listView1.Items[0].Checked = true;
}
}
}
我昨天問的第一個問題是關於timer1滴答事件。
但是也許我可以使用其他方法然后使用計時器來實時檢查子目錄?
這里的想法是在計時器滴答事件中每100ms一直檢查一次gif文件的主目錄和所有子目錄。
規則是首先檢查並找到Israel.gif文件,將其顯示在pictureBox1中,然后將復選框設置為true。
然后,繼續,找到所有子目錄gif文件,並將它們附近的復選框設置為true。 不要在pictureBox1中顯示其他的gif,而只顯示Israel.gif
為什么我這樣問? 因為下載每個gif時我也想顯示一個progressBar或其他指示。 但是,我使用BackgroundWorker
和Web客戶端的方式-如何檢查gif的下載時間? 我可以檢查,並且我使用了一個ProgressBar進行整體處理-但是否按gif下載?
這就是為什么我使用timer1的原因。
您可以更改方法:
在輔助線程中,將下載的文件數和當前下載的文件名以及要顯示的任何其他信息存儲在某個地方(以表格的變量形式)。
使用計時器增加進度條,以顯示正在進行的文件和其他信息。
您無需瀏覽目錄:所有信息都由輔助線程在變量中設置 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.