我有一个点击按钮,它会截取我在我的相框中显示的屏幕截图。我不会遇到这个代码的问题:
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();
}
}
如何解决此问题?
答案 0 :(得分:2)
那是因为你的while()
是无限的。是什么让flag
从捕获变为捕获?
如果您想要无限捕获屏幕 - 从不使用主线程来处理此类事情,因为它会导致它挂起并阻止您的应用程序更新UI。
使用BackgroundWorker class之类的内容,您可以使用this示例。
答案 1 :(得分:2)
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();
}
}
答案 2 :(得分:0)
在循环中尝试Application.DoEvents。我想这可以帮到你...
private void btnScreenShot_Click(object sender, EventArgs e)
{
// Freezes here
btnSave.Visible = true;
while(flag == 0)
{
Application.DoEvents();
sendto_bmpbox.Image = CaptureScreen();
}
}