ActiveX冻结了IE

时间:2009-05-12 17:26:58

标签: activex

我创建了一个activeX控件来执行一些操作,大约需要1分钟。在此操作过程中,IE完全冻结。有没有办法调用activeX控件,以便IE不冻结?

谢谢

3 个答案:

答案 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的线程问题,所以我认为没有办法做到这一点。