我的图像下载程序遇到问题。当我运行它时,它会冻结,直到下载完所有图像。标签改变但是图片框没有,我甚至无法移动程序。
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;
}
}
答案 0 :(得分:7)
你的申请冻结的原因是由于这些原因:
wc.DownloadFile(m.Value, @downloadDest + "\\"+ mastercount + ".jpeg");
Thread.Sleep(1000);
您正在Main Thread
或UI Thread
上运行此代码,因此在执行上述代码时无法执行任何用户界面操作。为了解决这个问题,你应该研究一下线程。一个好的开始是BackgroundWorker
见下文:
另见:
答案 1 :(得分:0)
如果您不需要将其作为Forms应用程序执行此操作,那么如果您将其作为控制台应用程序执行,则会更容易。控制台应用程序通常更容易工作,而不会出现冻结和跨线程访问问题。
如果您需要坚持使用Forms应用,最简单的解决方案是将Thread.Sleep
替换为Application.DoEvents
。下载每张图片时它仍然会冻结,DoEvents
可能会导致其他问题,但如果您只是需要快速修复,这是最简单的选择。