通过 while 循环加载 javascript 时 Web 浏览器没有响应
Web Brower is not responding when looping a javascript through while loop
我的网络浏览器在通过 while 循环 javascript 循环时没有响应,因此我无法取消此循环或对我的网络浏览器执行任何操作。
我正在使用复选框触发 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# 的角度来看,除非方法是异步的,否则 Thread.Sleep 仍然不会放弃对 UI 循环的控制front-end。也许不是这样,但你试过把 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();");
}
});
我的网络浏览器在通过 while 循环 javascript 循环时没有响应,因此我无法取消此循环或对我的网络浏览器执行任何操作。
我正在使用复选框触发 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# 的角度来看,除非方法是异步的,否则 Thread.Sleep 仍然不会放弃对 UI 循环的控制front-end。也许不是这样,但你试过把 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();");
}
});