URLの内容をダウンロードしてAPIをクエリするアプリを作成しました。各ダウンロードは、次のコードを使用して独自のスレッドで実行されます。
public void run(int id, string requestURL)
{
var filePath = "data\\" + id + ".xml";
(new FileInfo(filePath)).Directory.Create();
WebClient client = new WebClient();
client.DownloadFile(requestURL, filePath);
// code to parse file
}
これらの各ファイルが同時にロードされていないことに気づきました。
私はすでにここでこのようないくつかの質問を見てきましたが、それらのすべての場合において、各ダウンロードは一度だけ実行されました。私の場合、ダウンロードが完了したらすぐに再実行する必要があります。
どうすればこのようなことを達成できますか?
編集:スレッドを作成するために使用したコード:
public void startRun(object thread)
{
Threads t = (Threads)thread;
DoRun DoRun = new DoRun(this);
string kwd = t.keyword;
t.requestUrl = DoRun.returnUrl(System.Uri.EscapeDataString(kwd));
while (checkRunning())
{
DoRun.run(t.id, t.requestUrl);
}
}
private void startBtn_Click(object sender, EventArgs e)
{
searchRunning = true;
XmlDocument searches = new XmlDocument();
searches.Load("data\\Searches.xml");
XmlNodeList search = searches.SelectNodes("searches/search");
var nodeCount = search.Count;
for (var i = 0; i < nodeCount; i++)
{
Threads thisThread = new Threads();
thisThread.keyword = search[i].SelectSingleNode("query").InnerText;
thisThread.id = int.Parse(search[i].SelectSingleNode("id").InnerText);
Thread newThread = new Thread(() => startRun(thisThread));
newThread.Name = "SearchId: " + i;
newThread.IsBackground = true;
thisThread.thread = newThread;
threads.Add(thisThread);
newThread.Start();
}
}