gpt4 book ai didi

c# - 如何同步浏览网页浏览器?

转载 作者:太空狗 更新时间:2023-10-30 00:54:26 27 4
gpt4 key购买 nike

我环顾四周,我注意到每个人都说 webbrowser 是异步工作的,我认为这是错误的,因为当我触发 Navigate 甚至实现 documentComplete 事件时,没有任何反应。

我注意到当主线程(拥有网络浏览器的线程)完成他的工作时,网络浏览器才开始导航,可能是因为在那之后浏览器将使用主线程来执行他的命令。

现在这不好,因为我希望能够控制时间,我希望能够知道网络浏览器何时完成加载页面,然后继续我的工作。轮询在这里不起作用,因为我之前说过,网络浏览器甚至没有开始导航。

例子:

WebBrowser browser = new WebBrowser();

browser.Navigate(url);
while(browser.ReadyState != WebBrowserReadyState.Complete)
{
}

// Then executing the next steps...

我怎样才能同步使用 WebBrowser,这样我就可以使用 WebBrowser 的文档属性和其他东西,我想创建某种阻止方法这样我就可以控制并知道 WebBrowser 何时完成加载。

最佳答案

当您导航时,您的主线程不会等待文档完成。所以你需要通过全局变量来阻止它。肮脏的解决方案可能是;

        bool IsReady;
void Go()
{
IsReady = false;
brw.Navigate("url");
do
{
Thread.Sleep(10);
Application.DoEvents();
} while (!IsReady);
}

void brw_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
IsReady = true;
}

但这里的诀窍是当异常发生时它会默默地停止你的代码而没有任何明确的异常。所以我强烈建议在 try catch block 中使用与网络浏览器相关的代码。

关于c# - 如何同步浏览网页浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com