繁体   English   中英

C#将位图加载到PictureBox中 - 慢并阻止UI ..任何替代方案?

[英]C# Load Bitmap into PictureBox - slow and blocks UI .. any alternatives?

我将640x480位图一个接一个地加载到一个图片框中。 当我这样做时,我的UI被阻止了。 例如,如果我在文本框中键入内容,该文本框位于我的图片框所在的文本框中,我将无法立即看到按下的键,因为位图加载会使UI非常慢。会有人处理吗? 它周围有什么办法吗? 任何示例代码都会很棒。

谢谢

使用后台工作程序使gui不会冻结(异步调用图像显示)。 http://www.dreamincode.net/forums/topic/112547-using-the-backgroundworker-in-c%23/

你的第二个请求有点棘手,我想简短的回答就是不要依赖gdi +,如果这就是你正在做的事情,因为它已知很慢。 您是如何将图像加载到图像框中的?

Picturebox实际上是一个相当“重”的控件,它提供的东西; 在这里使用它可能不合适。 您可以考虑更简单的容器控件,或绘制表单本身的表面。

如果您想在此处考虑BackgroundWorker或任何其他线程技术,请记住,绘图本身必须在UI线程上进行; 没有办法解决这个问题。

如果从磁盘加载图像是延迟的来源,您可以考虑将图像加载到另一个线程上的内存中位图,然后以某种方式发信号以指示新项目已准备好被绘制。 然后,您将使绘图表面无效,并根据需要添加新项目。

也; 如果你正在对图像进行任何缩放,那么在后台线程中执行此操作是合适的 - 这样,绘图代码本身只需要绘制一个未缩放的矩形; 使用GDI + DrawUnscaled功能将位图复制到完全相同大小的区域实际上非常快。


为了得到更具体的内容,比如实际的代码,我想看看你现在如何做的代码。 我甚至不确定你是在“绘制”图像,而不是简单地设置Picture / Image属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM