我创建了一个activeX控件来执行一些操作,大约需要1分钟。在此操作过程中,IE完全冻结。有没有办法调用activeX控件,以便IE不冻结?
谢谢
答案 0 :(得分:6)
在任何ActiveX主机中都会出现同样的问题,而不仅仅是IE。如果您不想阻止UI线程,则需要更改ActiveX控件以在辅助线程上执行其工作。
答案 1 :(得分:4)
我的activeX出现了simulair问题,冻结了IE。我设法通过让我的activeX控件在客户端上创建新线程来做一个解决方法。即使线程正在执行其工作,activeX也会返回其完成并将取消阻止UI。
棘手的部分是知道线程何时完成。你可以通过在activeX中找到一个布尔属性,在线程完成时设置为true。从javascript开始,您可以继续调用该属性,直到将其设置为true。
使用Javascript:
var myActiveXObject = new ActiveXObject("myActiveX");
function startWork()
{
myActiveXObject.startWork();
setTimeout(checkIsDone(), 1000);
}
function checkIsDone()
{
if(myActiveXObject.checkIsDone())
workComplete();
else
setTimeout(checkIsDone(), 1000);
}
的ActiveX:
private bool blnIsDone;
[ComVisible(true)]
public void startWork()
{
blnIsDone = false;
Thread myThread = new Thread(delegate()
{
ThreadedWork();
});
myThread.Start();
}
private ThreadedWork()
{
//Do work
blnIsDone = true;
}
[ComVisible(true)]
public bool checkIsDone()
{
return blnIsDone;
}
答案 2 :(得分:1)
这是一个涉及IE的线程问题,所以我认为没有办法做到这一点。