0

我有一些 c# 经验,但我是 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; 
} 

我的问题是我在一个间隔约为 100 毫秒的计时器中使用它。每次截取屏幕截图时,我都会注意到 UI 线程受到影响(移动表单时出现延迟等)。

有没有办法在另一个线程上生成屏幕截图,这样它就不会影响 UI?我读过一些关于的东西BackgroundWorker,这是要走的路吗?如果有人能在这里指出正确的方向,我将不胜感激。

4

1 回答 1

2

从评论到回答:

后台工作人员是一种方法,但如果您可以使用 .NET 4.0,您也可以查看任务并行库(任务和任务<>)。.NET 4.5 还支持很有用的 async/await 模式。

BackgroundWorker 的任务并行库替换?这个http://msmvps.com/blogs/brunoboucard/archive/2010/11/06/parallel-programming-with-c-4-0-part-3.aspx将提供更多信息

于 2012-12-13T09:29:23.570 回答