概念:指定されたURLからファイルをダウンロードするC#アプリを作成しています。テキストボックス、URLの追加、ファイルのダウンロード、すべてのイベントは正しい方法で発生します。
このプログラムを再作成して、複数のファイルを1つずつダウンロードしようとしています。1つのURL/行を持つテキストボックスがあります。解析は正しく行われます。テキストボックスに配置された文字列配列にすべてのリンクがあります。次に、非同期のダウンロードを開始し、1つずつダウンロードするようにしたかったので、現在のURLのダウンロードが完了するまで次のURLに移動したくないので、foreachループでwhileループを作成しました。
問題は次のとおりです。無限ループに陥ります(以前にこの作業を行いましたが(idk how)、whileループにメッセージボックスを配置した場合(注:1分前に再試行しましたが、今回はうまくいきませんでした) )。
コードスニペットを表示します。
foreach (string url in urllist)
{
isdonwloaded = false;
string filename = url.Split('/').Last();
label3.Text = filename;
webclient.DownloadFileAsync(new Uri(url), @"C:\Users\Krisz" + @"\" + filename);
while (!isdonwloaded) // this was the first idea, but with webclient.IsBusy it did the same thing
{
// MessageBox.Show(counter);
Thread.Sleep(1000);
label8.Text = "Download in progress...";
}
counter++;
label8.Text = "Done!";
}
// Events:
webclient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webc_DownloadProgressChanged);
webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(webc_DownloadFileCompleted);
// The DownloadFileCompleted event:
void webc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
label7.Text = String.Format("Files {0} / {1}", counter, arraylength(urllist));
isdonwloaded = true;
}
私はこのスレッドを調べました:WebClient.DownloadFileAsync-一度に1つずつファイルをダウンロードしますが、どちらの方法でも機能させることができませんでした。(多分私は何かを誤解しましたか?)
誰かが私にいくつかのヒントを与えることができます、私は何を間違えましたか?私は実際にイベントを使用したことがなかったので、エラーが発生するのは時間の問題でした。少しでも助けていただければ幸いです。このプログラムは私にとって便利なものです。