C#下载程序冻结直到完成

时间:2013-07-28 17:48:51

标签: c#

我的图像下载程序遇到问题。当我运行它时,它会冻结,直到下载完所有图像。标签改变但是图片框没有,我甚至无法移动程序。

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;
    }
}

2 个答案:

答案 0 :(得分:7)

你的申请冻结的原因是由于这些原因:

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

您正在Main ThreadUI Thread上运行此代码,因此在执行上述代码时无法执行任何用户界面操作。为了解决这个问题,你应该研究一下线程。一个好的开始是BackgroundWorker

见下文:

另见:

答案 1 :(得分:0)

如果您不需要将其作为Forms应用程序执行此操作,那么如果您将其作为控制台应用程序执行,则会更容易。控制台应用程序通常更容易工作,而不会出现冻结和跨线程访问问题。

如果您需要坚持使用Forms应用,最简单的解决方案是将Thread.Sleep替换为Application.DoEvents。下载每张图片时它仍然会冻结,DoEvents可能会导致其他问题,但如果您只是需要快速修复,这是最简单的选择。