我想知道在使用网络浏览器时如何控制代码流

本文关键字:何控制 控制 代码 想知道 浏览器 网络 | 更新日期: 2023-09-27 18:00:54

我有一个循环,在循环中我调用

   webbrowser.navigate("www.example.com");

在这之后,你知道documentcompleted函数被调用了,我在该函数中做了一些工作,但在所有工作完成后,什么都没有发生——代码不会像在循环中那样返回循环和流动。我做错什么了吗。

感谢

我想知道在使用网络浏览器时如何控制代码流

此问题是由循环引起的。web浏览器的导航只能完成,DocumentCompleted事件只能在UI线程再次空闲时激发。这是多线程组件工作方式的核心,它们只能在UI线程空闲时在UI线程上激发"作业完成"事件并引发消息循环。例如,BackgroundWorker类具有完全相同的要求。

解决这个问题的正确方法是创建一个状态机。你通过告诉浏览器导航到第一个url来启动它。您让DocumentCompleted事件处理程序处理响应,然后告诉浏览器导航到下一个url。或者当没有更多的url要处理时停止。

不正确的方法是调用Application。循环中的DoEvents((。这会启动消息循环并允许事件启动。但这是一件非常危险的事情,DoEvents((对处理事件的具体内容没有选择性。如果你打算使用这个答案,一定要读一下。

下一种方式是即将在C#的下一个版本中支持异步和等待关键字。目前提供CTP。

当您通过导航离开javascript所在的网页时,这类似于关闭应用程序并启动其他应用程序。

如果你有一个桌面应用程序,你在其中写道:

Application.ExitAndStartOtherApplication("SomeOtherApplication.exe");

您不会期望在该行之后运行任何代码。

这是一样的事情。