屏幕捕获问题

本文关键字:问题 屏幕 | 更新日期: 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();
            }
        }