1

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();
        }
    }
4

0 に答える 0