我有一些c#experiece,但我是WinForms的新手。
我有一个方法,将截图设为BitMap
:
public Bitmap GetSreenshot()
{
Rectangle bounds = Screen.PrimaryScreen.Bounds;
Bitmap bmp = new Bitmap(bounds.Width, bounds.Height,
PixelFormat.Format32bppArgb);
Graphics gfx = Graphics.FromImage(bmp);
gfx.CopyFromScreen(bounds.X,
bounds.Y,
0,
0,
bounds.Size,
CopyPixelOperation.SourceCopy);
return bmp;
}
我的问题是我在一个间隔为~100ms的计时器中使用它。每次拍摄截图时,我都会注意到UI线程受到影响(移动表单时滞后等)。
有没有办法在另一个线程上生成屏幕截图,以免影响UI?我读过一些关于BackgroundWorker
的内容,是不是要走了?如果有人能指出我在正确的方向,我将不胜感激。
答案 0 :(得分:2)
从评论到回答:
后台工作程序是一种可行的方法,但如果.NET 4.0可用,您还可以查看任务并行库(任务和任务<>)。 .NET 4.5还支持async / await模式,它可能很有用。
Task parallel library replacement for BackgroundWorker?此http://msmvps.com/blogs/brunoboucard/archive/2010/11/06/parallel-programming-with-c-4-0-part-3.aspx将提供更多信息