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 多线程 JavaScript
[解决办法]
SetApartmentState
[解决办法]
转到主线程再触发事件