屏幕捕获问题
本文关键字:问题 屏幕 | 更新日期: 2023-09-27 18:25:30
我有一个按钮,点击它会得到一张屏幕截图,并显示在我的图片框中。我不会面临这个代码的问题:
private void btnScreenShot_Click(object sender, EventArgs e)
{
btnSave.Visible = true;
sendto_bmpbox.Image = CaptureScreen();
}
然而,当我循环整个表单时,我无法点击任何内容:
private void btnScreenShot_Click(object sender, EventArgs e)
{
// Freezes here
btnSave.Visible = true;
while(flag == 0)
{
sendto_bmpbox.Image = CaptureScreen();
}
}
我该如何解决这个问题?
这是因为您的while()
是无限的。是什么使flag
从捕获变为捕获?
如果你想无限地捕捉屏幕-永远不要使用主线程来处理这些事情,因为这会导致它挂起,并阻止你的应用程序更新UI。
使用BackgroundWorker类进行类似的操作,您可以使用此示例。
private void button1_Click(object sender, EventArgs e)
{
btnSave.Visible = true;
Thread thread = new Thread(new ThreadStart(threadWork));
thread.Start();
}
int flag = 0;
private void threadWork()
{
while (flag == 0)
{
UpdateImage();
}
}
private void UpdateImage()
{
if (this.InvokeRequired)
{
this.Invoke(UpdateImage);
}
else
{
sendto_bmpbox.Image = CaptureScreen();
}
}
在循环中尝试Application.DoEvents。我认为这可以帮助你。。。
private void btnScreenShot_Click(object sender, EventArgs e)
{
// Freezes here
btnSave.Visible = true;
while(flag == 0)
{
Application.DoEvents();
sendto_bmpbox.Image = CaptureScreen();
}
}