日期:2014-05-17  浏览次数:21266 次

C#做的ActiveX多线程回调JS的一些问题
由于项目需要一个读写IC卡的功能故要做一个ActiveX嵌入网页供客户使用,其实之前已经交付给客户使用了,不过近期由于功能变动,需要添加一些其他功能。现在遇到了一个在多线程下回调页面JS的问题:在页面通过JS调用ActiveX里面的一个多线程方法,等处理完得到结果后回调页面JS。但是通过测试发现在不用多线程的情况下,可以正常回调页面JS,一旦开启多线程就无法正常回调页面JS。
经调试发现,在页面调用ActiveX方法的时候,传进来的HTMLWindow2出现异常:

注:由于是在之前代码的基础上做的修改故不存在ActiveX有问题的情况。
话不多说,上代码:

using mshtml;        
HTMLWindow2 html = null;
CmdControl cmd = null;
Thread work = null;
string JsName = string.Empty;
        public class1()
        {
            cmd = new CmdControl();
            cmd.EvtResult += new DltResultCallBack(CallBack);
        }
        public void GetInfo(object obj, string jsname)
        {
            work = new Thread(new ThreadStart(() =>
            {
                html = (HTMLWindow2)obj;
                JsName = jsname;
                cmd.GetUserInfo(out hr);
            }));
            work.Start();
        }
        //这里得到多线程处理后的结果
        private void CallBack(string result)
        {
           if (html != null)
           {
               string a = string.Format("{0}('{1}')", JsName, result);
               html.execScript(a, "javascript");
           }
        }

刚刚接触用C#写ActiveX,很多问题需要请教各位大大指点