私は推測できるウェブクライアントしか使用できません。私はバックグラウンドワーカーの "DoWork"の中でファイルをダウンロードするためにWebクライアントを使用しています
今、私はファイルをダウンロードするために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イベントに関するものでした。
しかし、おそらく私はいくつかの他の方法を使用して、タイマーをリアルタイムでサブディレクトリをチェックすることができますか?
ここでのアイデアは、タイマーイベントの100msごとにメインディレクトリとgifファイルのすべてのサブディレクトリをチェックすることです。
ルールが最初にチェックされ、Israel.gifファイルがpictureBox1に表示されていることを確認し、チェックボックスをtrueに設定します。
その後、すべてのサブディレクトリgifファイルを見つけて、それらの近くのチェックボックスをtrueに設定します。 pictureBox1に他のGIFを表示しないIsrael.gif
なぜ私はこのようにしていますか?各gifがダウンロードされたときにprogressBarやその他の指示が表示されたかったからです。しかし、私がBackgroundWorker
とウェブクライアントを使用している方法 - gifが完全にダウンロードされたときはどうすれば確認できますか?私は確認することができますし、全体的なプロセスのためにprogressBarを使用しています - しかし、gifのダウンロードごとに?
私はtimer1を使用しています。
多分代わりに、私は/どういうわけかFileSystemWatcherを使用する必要がありますタイマーを使用して? –
'client.DownloadProgressChanged'イベントを使用しようとしましたか?それはsのプロパティを持っています* BytesReceived * –
@ L.B代わりにbackgroundworkerを使用していますか? Webクライアントのみを使用すると、ファイルとイベントを非同期でダウンロードできますか?たぶん私はそれを使用します。 –