我创建了一个activeX控件来执行一些操作,大约需要1分钟。在此操作过程中,IE完全冻结。有没有办法调用activeX控件,这样IE就不会冻结?
谢谢
发布于 2009-05-12 17:29:23
这是一个处理IE的线程问题,所以我不认为有任何方法可以做到这一点。
发布于 2009-05-12 17:32:20
你在任何ActiveX主机上都会遇到同样的问题,而不仅仅是IE。如果不想阻塞UI线程,则需要更改ActiveX控件以在辅助线程上执行其工作。
发布于 2011-02-01 16:25:58
我有一个类似的问题与我的activeX冻结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;
}https://stackoverflow.com/questions/853902
复制相似问题