1

画像ダウンロード プログラムに問題があります。実行すると、すべての画像がダウンロードされるまでフリーズします。ラベルは変更されますが、picturebox は変更されず、プログラムを移動することさえできません。

foreach (Match m in ms)
{
    label3.Text = m.Value;
    mastercount++;
    pictureBox1.ImageLocation = m.Value;
    try
    {
        WebClient wc = new WebClient();
        wc.DownloadFile(m.Value, @downloadDest + "\\"+ mastercount + ".jpeg");
        Thread.Sleep(1000);

    }
    catch (Exception x)
    {
        label3.Text = "Failed to download image" + m.Value;
    }
}
4

2 に答える 2

7

アプリケーションがフリーズする理由は、次の行が原因です。

 wc.DownloadFile(m.Value, @downloadDest + "\\"+ mastercount + ".jpeg");
 Thread.Sleep(1000);

このコードを で実行しているMain ThreadためUI Thread、上記のコードの実行中はユーザー インターフェイス操作を実行できません。これを解決するには、スレッド化を検討する必要があります。良いスタートはBackgroundWorker

下記参照:

関連項目:

于 2013-07-28T17:52:14.707 に答える
0

フォーム アプリとしてこれを行う必要がない場合は、コンソール アプリとして行うと、はるかに簡単になります。通常、コンソール アプリは、フリーズやクロススレッド アクセスの問題がなく、作業が簡単です。

Forms アプリに固執する必要がある場合、最も簡単な解決策は に置き換えることThread.SleepですApplication.DoEvents。各画像をダウンロードしている間もフリーズし、他の問題が発生するDoEvents可能性がありますが、簡単な修正が必要な場合は、これが最も簡単なオプションです.

于 2013-07-28T18:04:32.280 に答える