我有一个循环,并在循环中调用
webbrowser.navigate("www.example.com");
在此之后你知道调用了documentcompleted函数并且我在这个函数中做了一些工作,但是在完成所有工作之后,没有任何事情发生代码不会像循环中那样回到循环和流程。我是做错了。
谢谢
答案 0 :(得分:2)
此问题是由拥有循环引起的。 Web浏览器的导航只能完成,而DocumentCompleted事件只能在UI线程再次空闲时触发。这是多线程组件工作方式的核心,它们只能在UI线程空闲时触发UI线程上的“作业完成”事件并泵送消息循环。例如,BackgroundWorker类具有完全相同的要求。
解决问题的正确方法是创建状态机。通过告诉浏览器导航到第一个URL来启动它。您让DocumentCompleted事件处理程序处理响应,然后告诉浏览器导航到下一个URL。或者在没有更多网址处理时停止。
不正确的方法是在循环中调用Application.DoEvents()。泵送消息循环并允许事件触发。但这是一件非常危险的事情,DoEvents()并没有选择完全处理什么事件。如果您打算使用它,请务必阅读this answer。
下一个方法是在下一版本的C#中即将支持async和await关键字。目前可用in CTP。
答案 1 :(得分:0)
当您离开网页时,您的javascript通过导航离开,这类似于关闭您的应用程序并启动其他应用程序。
如果你有一个桌面应用程序,你写了:
Application.ExitAndStartOtherApplication("SomeOtherApplication.exe");
你不会期望在该行之后运行任何代码。
它是一回事。