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(); }
posted @ 2017-06-28 15:42  尼克劳斯  阅读(1325)  评论(0编辑  收藏  举报