开发一个ie 插件,一个toolbar。希望在有事件的时候将网页跳转 采用webbrowserclass 定义explor,当事件发生的时候我希望调用execScript执行一段JScript,但是在执行过程中出现exception “指定的转换无效” 经查看是在从HTMLDocument.parentWindow 转换为IHTMLWindow2的时候发生。请问是否有人可以解决一下。
以下提供简短代码
Static Pulbic void Browse(string surl,bool burl)
{
 ...//执行一些判断
 string command =""//定义jscript 脚本
 ... 
 mshtml.IHTMLDocument2  doc = wb.Document as mshtml.IHTMLDocument2  //wb 为webbrowserclass 
 mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2//此处会发生“指定转换无效”的异常if(win !=null)
win.execScript(command,"JSCript");}
但是我在toolbar增加一个test button 来测试该方法。则正常执行。但是在event发生的时候调用此方法就出现异常。请高人解答。

解决方案 »

  1.   

    跟踪doc.parentWindow看看是否还是原来类型的窗口
      

  2.   

    无法trace ,还有其他办法吗
      

  3.   

    访问HTMLDocument必须在主线程中,如果在其他线程中访问就会报错。
      

  4.   

    这些错误源于Com的线程处理方式,通常跨线程访问Com对象是需要一些特殊处理的,因为Com对象的访问有很多方式,比如单线程单服务的方式,Com的线程称为套间。在原生C++中跨越套间是方便的,可以用原生API来进行,但是在C#中我不知道如何处理,我只能把所有的访问都Invoke到主线程,但是在插件中我不知道哪里是主线程。
      

  5.   

    To BlueTrees(蜗牛) :
    感谢您的提示,现在已经解决了。toolbar中可以调用invoke 方法把他们都invoke主线程上。在主线程上执行。(toolbar base on user control 所以可以invoke)。给您加分了。谢谢
    我的MSN是: [email protected]。有机会长长交流。谢谢。