首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveX冻结IE

ActiveX冻结IE
EN

Stack Overflow用户
提问于 2009-05-12 17:26:58
回答 3查看 1.6K关注 0票数 1

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-12 17:29:23

这是一个处理IE的线程问题,所以我不认为有任何方法可以做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2009-05-12 17:32:20

你在任何ActiveX主机上都会遇到同样的问题,而不仅仅是IE。如果不想阻塞UI线程,则需要更改ActiveX控件以在辅助线程上执行其工作。

票数 6
EN

Stack Overflow用户

发布于 2011-02-01 16:25:58

我有一个类似的问题与我的activeX冻结IE。我设法做了一个变通办法,让我的activeX控件在客户端创建新线程。即使线程正在做它的工作,activeX也会返回它已经完成,并将解除对UI的阻塞。

棘手的部分是知道线程何时完成。您可以通过在activeX中设置一个布尔值属性来确定线程完成时设置为true。在javascript中,您可以继续调用该属性,直到将其设置为true。

Javascript:

代码语言:javascript
复制
var myActiveXObject = new ActiveXObject("myActiveX");

function startWork()
{
    myActiveXObject.startWork();

    setTimeout(checkIsDone(), 1000);
}

function checkIsDone()
{
    if(myActiveXObject.checkIsDone())
        workComplete();
    else
        setTimeout(checkIsDone(), 1000);
}

ActiveX:

代码语言:javascript
复制
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;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/853902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档