1

我的图像下载程序有问题。当我运行它时,它会冻结,直到下载所有图像。标签改变,但图片框没有,我什至不能移动程序。

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 应用程序执行,那么将其作为控制台应用程序执行会容易得多。控制台应用程序通常更容易工作,而不会出现冻结和跨线程访问问题。

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

于 2013-07-28T18:04:32.280 回答