我猜我只能使用网络客户端。
但现在我使用BackgroundWorker
线程和网络客户端下载文件。
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 tick事件。
但也许我可以使用其他方式然后定时器来实时检查子目录?
这里的想法是在计时器tick事件中每隔100ms检查主目录和gif文件的所有子目录。
首先检查规则并找到Israel.gif文件在pictureBox1中显示它并将复选框设置为true。
然后继续并找到所有子目录的gif文件,并将它们附近的复选框设置为true。不要在pictureBox1中显示其他GIF只有以下Israel.gif
为什么我这样问?因为我想在下载每个gif时显示progressBar或其他一些指示。但是我使用BackgroundWorker
和网络客户端的方式 - 如何检查何时完全下载gif?我可以检查并且我使用progressBar进行整体处理 - 但是每个gif下载?
这就是我使用timer1的原因。
答案 0 :(得分:-1)
您可以改变您的方法:
在辅助线程中,存储某个位置(在表单的变量中)下载的文件数和当前下载的文件的名称以及您要显示的任何其他信息。
使用计时器增加进度条,显示正在进行的文件+其他信息。
您无需浏览目录:所有信息都由辅助线程在变量中设置。