AutoCAD中使用Webbrowser的诡异问题
问题还原:
在CAD中弹出一个自己的窗体(测试时是非模态窗体),窗体中有一个Webbrowser和一个Button,在Button的click事件中给Webbrowser指定一个页面(自己的一个页面,里面主要包含一个表格和一些JS代码),然后使用Application.DoEvents强制等待Webbrowser打开的页面执行到一定程度,然后才允许程序继续执行;在窗体的Load事件中主动触发了了Button的click事件,Webbrowser执行正常;但是窗体打开之后如果再手动点击Button,那么就会使CAD崩溃。
但是如果Load事件中不调用Button的click事件,在窗体Load事件中启动一个Timer,在Timer的tick事件中再调用Button的click事件,那么在窗体打开之后,不管点几次Button,都不会出现崩溃。
Button的Click事件代码示例:
private void button1_Click(object sender, EventArgs e) { //打开一个页面 webBrowser1.Navigate("http://192.168.1.11/a.html"); //强制循环等待,直到确保页面中的JS执行完成(js代码在页面的window.onload时执行) while (webBrowser1.Document == null || webBrowser1.Document.Body == null || webBrowser1.Document.Body.OuterHtml.Contains("@@")) { Application.DoEvents(); } }
如果这个窗体是一个单独的EXE程序,就算在窗体的Load事件中直接调用Button的click事件,在窗体打开后点击Button,也不会出现任何问题。
很诡异的一个问题。
private void Form3_Load(object sender, EventArgs e)
{ button1_Click(null, null); //timer1.Start(); }
作者:尼克劳斯
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。