webclientメソッドと多数のスレッドを同時に実行して複数のファイルをダウンロードしたい。私のURL構造は変数'inti'に依存しているので、forループを使用してURLとファイルパスを生成します。問題は、開始されたスレッドが起動されるまで、URLとファイルパスの値が変更されることです。タイムラインは次のようになります。
メインループでは、url="url1"およびpath="filepath1"です。
Thread1は、値「url1」および「filepath1」で呼び出されます。
メインループでは、url="url2"およびpath="filepath2"です。
Thread2は、値「url2」および「filepath2」で呼び出されます。
Thread1は、値「url2」および「filepath2」で始まりました。
Thread2は、値「url2」および「filepath2」で始まりました。
エレガントな解決策は見つかりませんでした。あなたは何を提案しますか?
string path = "";
string url = "";
string baseURL = "http://www.somewebsite.com/12/";
for (int i = 10; i <= DateTime.Now.Month; i++)
{
path = "C:\\folder\\" + i.ToString() + ".html";
url = baseURL + i.ToString();
Thread webThread = new Thread(delegate()
{
downloadScheduleFile(url,path);
});
webThread.Start()
}
private void downloadScheduleFile(string url, string filepath)
{
var client = new WebClient();
try
{
client.DownloadFile(url, filepath);
}
catch(WebException e) {
Console.WriteLine(System.Threading.Thread.CurrentThread.Name+e.Message);
}
}