C# 无法获取要以编程方式更新的PictureBox映像

C# 无法获取要以编程方式更新的PictureBox映像,c#,winforms,picturebox,C#,Winforms,Picturebox,我有一个C#winform程序,它可以循环浏览图像,进行一些处理,等等。在处理过程中,我希望用户看到程序所显示的图像。我在我的程序中添加了一个picturebox,我正在使用以下代码段: pbIDImage.ImageLocation = filepath; 如果我将这行代码放在表单构造函数中(使用硬编码的文件路径进行测试),它将显示图像。但是如果我把它放在我真正需要它的图像处理循环中,picturebox永远不会显示图像。为什么它可以在构造函数中工作,而不能在程序的不同方法中工作 知道为什么

我有一个C#winform程序,它可以循环浏览图像,进行一些处理,等等。在处理过程中,我希望用户看到程序所显示的图像。我在我的程序中添加了一个picturebox,我正在使用以下代码段:

pbIDImage.ImageLocation = filepath;
如果我将这行代码放在表单构造函数中(使用硬编码的文件路径进行测试),它将显示图像。但是如果我把它放在我真正需要它的图像处理循环中,picturebox永远不会显示图像。为什么它可以在构造函数中工作,而不能在程序的不同方法中工作


知道为什么吗?

只有当imagebox第一次加载整个控件时,才会访问构造函数中的位置变量

这意味着您可以在创建imagebox后生成变量后更改代码,但这显然不会强制它加载图像


您可以下载图像并保存到变量中。然后可以将图像映射到控件。

可能主要问题在于循环

如果路径正常,图像将加载,但没有足够的时间渲染,或者UI线程太忙,无法反映更改

作为证据,您可能会看到最后一张图像加载到图片框中

作为一种解决方法,您可以在循环中使用此代码(我不建议这样做,它只是用于测试)

但一般来说,我认为当您想在循环中更改图像时,或者如果更改不太快,您可以使用BackgroundWorker或基于任务的解决方案来设置图像。

您可以使用它。如文档中所述,要么设置
ImageLocation
,然后调用
pictureBoX.Load()
,要么直接使用接受图像位置的重载,如
pictureBoX.Load(图像位置)


请注意,此行为由控制,默认情况下为
false
。因此,另一种选择是将该属性设置为
true
,然后只使用
picturebox.ImageLocation=…
。如您所见,您有很多选择。

循环实际上导致UI冻结。我实现了一个后台工作程序,然后使用picturebox.ImageLocation()按预期加载图像。这就是为什么在构造函数中它加载得很好(循环没有启动,UI是免费的),然后当循环启动时,图像无法在处理过程中加载。

显示相关的“图像处理循环”,您现在已经完全编辑了您的问题,因此我的答案不再适合。。。对不起@cramopy我的编辑格式不正确,所以我删除了。。。无论如何都不应该影响解决方案。我会胡乱猜测:您的“图像处理循环”是一个阻塞过程,表单上的任何内容在完成之前都不会更新。换句话说:你是在后台处理你的图像,还是只是一个简单方法中的一个简单循环?对不起,我不明白。图像文件路径已经保存到一个变量(filepath)中,我已经尝试了picturebox.Refresh()和其他一百万种方法。如何强制它重新加载?它仅通过设置
pbIDImage.ImageLocation=filepath重新加载图像
不需要其他任何东西。@RezaAghaei我已经试过了,但没有显示图像:/@swinkel似乎是因为使用了循环。你是对的,问题出在循环上-它阻止了UI的更新。实际上,我必须实现一个后台工作人员。感谢您的反馈:)
pbIDImage.ImageLocation = filepath;
pbIDImage.Refresh();
Application.DoEvents();