【问题】
C#中,用到WebBrowser,在DocumentCompleted事件中执行一些动作。
现在发现一个问题,有时候DocumentCompleted会被执行2次。甚至多次。
【解决过程】
1.参考:
Why is WebBrowser_DocumentCompleted() firing twice?
去添加判断:
private void wbsChaseFootprint_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (wbsChaseFootprint.ReadyState != WebBrowserReadyState.Complete) { //not actually complete, do nothing return; } //do things //... }
然后调试一下,看看是否会发生该情况,断点是否能执行到该句。
结果不会执行到return;,但是DocumentCompleted还是被执行2次。
2.参考:
WebBrowser DocumentCompleted event fired more than once
去试试:
private void wbsChaseFootprint_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //if (wbsChaseFootprint.ReadyState != WebBrowserReadyState.Complete) //{ // //not actually complete, do nothing // return; //} if (!e.Url.Equals(wbsChaseFootprint.Url)) { //not actually complete, do nothing return; } //do things //... }
结果是,最后是可以了。
因为,对于另外一次的DocumentCompleted调用,传入的url,是和当时设置的url不同的,所以可以忽略掉。
3.但是稍微有点奇怪的是,当时设置的url是url1,然后接着,第一次调用DocumentCompleted时,已经就是url1了。
然后接着第二次的调用DocumentCompleted,传入的是url2。
觉得有点奇怪的是,应该是先url2,再url1才对啊。
【总结】
目前就用:
if (!e.Url.Equals(wbsChaseFootprint.Url)) { //not actually complete, do nothing return; }
的方法凑合用吧。