屏幕截图问题

时间:2012-02-21 13:58:15

标签: c# .net image c#-4.0

我有一个点击按钮,它会截取我在我的相框中显示的屏幕截图。我不会遇到这个代码的问题:

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();
            }
        }

如何解决此问题?

3 个答案:

答案 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();
            }
        }