我有一个C#winform程序循环遍历图像,进行一些处理等。在处理时,我希望用户看到程序所在的图像。我在我的程序中添加了一个图片框,我正在使用这段代码:
pbIDImage.ImageLocation = filepath;
如果我在表单构造函数中放入这段确切的代码(用硬编码的文件路径来测试),它会显示图像。但是如果我把它放在我实际需要的图像处理循环中,那么图片框就不会显示图像。为什么它会在构造函数中工作,而不是在程序的不同方法中工作?
知道为什么吗?
答案 0 :(得分:2)
您可以使用PictureBox.Load Method。如文档中所述,要么设置ImageLocation
然后调用pictureBoX.Load()
,要么直接使用接受图像位置的重载,例如pictureBox.Load(image_location);
请注意,此行为由PictureBox.WaitOnLoad Property控制,默认情况下为false
。另一种方法是将该属性设置为true
,然后仅使用pictureBiox.ImageLocation = ...
。如你所见,你有很多选择。
答案 1 :(得分:1)
可能主要问题在于循环。
如果路径正常,图像将加载,但没有足够的时间进行渲染,或者UI线程太忙而无法反映更改。
作为证据,您可能会看到最后一张图片已加载到图片框中。
作为一种解决方法,您可以在循环中使用此代码(我不推荐,仅用于测试)
pbIDImage.ImageLocation = filepath;
pbIDImage.Refresh();
Application.DoEvents();
但总的来说,我认为您不需要在循环中更改图像时显示图像,或者如果更改不是太快,您可以使用背景工作者或基于任务的解决方案来设置图像。 / p>
答案 2 :(得分:0)
只有当imagebox第一次加载整个控件时,才会访问构造函数中的位置变量。
这意味着您可以在创建图像框后生成变量后更改代码,但这样就不会强制它加载图像。
您可以下载图像并保存到变量中。然后图像可以控制。
答案 3 :(得分:0)
循环导致UI实际冻结。我实现了一个后台工作器,然后按预期加载图像 - 使用picturebox.ImageLocation()。这就是为什么在构造函数中它加载正常(循环没有启动,UI是免费的)然后当循环开始时,图像无法在处理过程中加载。