截取屏幕截图而不阻止UI线程

时间:2012-12-13 09:17:20

标签: c# winforms

我有一些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的内容,是不是要走了?如果有人能指出我在正确的方向,我将不胜感激。

1 个答案:

答案 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将提供更多信息