【发布时间】:2010-01-09 21:48:49
【问题描述】:
我目前正在开发一个 Windows.Forms 应用程序。这基本上是一个简单的运动检测问题。
我在表单上有一个按钮,按下该按钮时会启动执行以下操作的后台工作人员:
- 从磁盘获取图像
- 创建一个新的位图,用作缓冲区。
- 执行运动检测
- 根据运动检测的结果,更新缓冲区(使用缓冲区的绘图表面)
- 使用包含缓冲区克隆的参数触发进度更改事件,基本上是
(sender as BackgroundWorker).ReportProgress((Bitmap)buffer.Clone())
在 Progress Changed 事件中,然后我将缓冲区绘制到屏幕上。
if (!PnlImage.IsDisposed)
PnlImage.CreateGraphics().DrawImageUnscaled(buffer, 0, 0);
我不禁想知道这是否是在屏幕上绘制更新图像的最佳方式。谁能建议我可以做的任何改进? 谢谢。
编辑: 我已经更新了程序以使用 .NET Framework 4,我们不再使用 BackgroundWorker。相反,我们现在使用 System.Threading.Tasks 命名空间,并使用 Invoke 从任务中更新背景图像。
感谢所有回复。
【问题讨论】:
-
克隆缓冲区的原因是什么?
-
你不能跨线程访问它,因为每一步都会创建和销毁一个新的缓冲区。我尝试制作一个公共缓冲区,并使用锁来访问它,但它并没有证明太成功。
标签: c# winforms motion-detection