C# 在不阻塞UI线程的情况下拍摄屏幕截图
我有一些经验,但我对WinForms还不熟悉 我有一种方法,它将屏幕截图作为C# 在不阻塞UI线程的情况下拍摄屏幕截图,c#,winforms,C#,Winforms,我有一些经验,但我对WinForms还不熟悉 我有一种方法,它将屏幕截图作为位图: public Bitmap GetSreenshot() { Rectangle bounds = Screen.PrimaryScreen.Bounds; Bitmap bmp = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb); Graphics gfx = Graphics
位图
:
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的文章,是这样吗?如果有人能在这里为我指出正确的方向,我将不胜感激。从评论到回答:
后台工作程序是一种方法,但如果.NET4.0对您可用,您也可以查看任务并行库(任务和任务)。NET4.5还支持异步/等待模式,这是非常有用的
这将提供进一步的信息后台工作者是一种方法,但如果.NET 4.0对您可用,您也可以查看任务并行库(
Task
和Task
)。NET 4.5还支持异步/等待模式,该模式非常有用。@Grumbler85好的,是的,它是可用的。后台工作者与TPL相比有什么缺点吗?我个人喜欢异步/等待模式,因为您不必将代码拆分为启动块和结果处理块(bgworker和task都需要它们)。。这可以提供进一步的信息