在while循环中循环javascript时,Web浏览器没有响应



我遇到一个问题,在while循环中循环javascript时,我的web浏览器没有响应,所以我无法取消此循环或对我的web服务器执行任何操作。

我正在用复选框触发javascript,在选中复选框后我无法取消选中它,因为我的浏览器在循环时没有响应

这是代码:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        while (checkBox1.Checked == true)
        {
            System.Threading.Thread.Sleep(1000);
            CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("var elems = document.getElementsByClassName('VotingButton VotingButton--upvote btn-white'); elems[0].click();");
            System.Threading.Thread.Sleep(1000);
            CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("var elems1 = document.getElementsByClassName('task-skip-submit js-next-question'); elems1[0].click();");
        }
    }

我对cefsharp不是很熟悉,但从C#的角度来看,除非方法是异步的,否则它是线程。睡眠仍然不会将UI循环的控制权交回前端。也许不是这样,但你试过把checkBox1_CheckChanged变成async Task吗?

如果这不是一个选项,那么我认为您需要将while循环踢到后台线程中。你有一个异步上下文可以使用吗?

Task.Run(() => {
  while (checkBox1.Checked == true)
        {
            System.Threading.Thread.Sleep(1000);
            CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("var elems = document.getElementsByClassName('VotingButton VotingButton--upvote btn-white'); elems[0].click();");
            System.Threading.Thread.Sleep(1000);
            CurBrowser.GetMainFrame().ExecuteJavaScriptAsync("var elems1 = document.getElementsByClassName('task-skip-submit js-next-question'); elems1[0].click();");
        }
});