ActiveX зависает IE - PullRequest
       14

ActiveX зависает IE

1 голос
/ 12 мая 2009

Я создал элемент управления ActiveX для выполнения некоторых действий, которые занимают около 1 минуты. Во время этого действия IE полностью зависает. Есть ли способ вызвать элемент управления ActiveX, чтобы IE не зависал?

Спасибо

Ответы [ 3 ]

6 голосов
/ 12 мая 2009

У вас будет такая же проблема на любом хосте ActiveX, а не только в IE. Если вы не хотите блокировать поток пользовательского интерфейса, вам нужно изменить свой элемент ActiveX, чтобы он работал во вторичном потоке.

4 голосов
/ 01 февраля 2011

У меня была проблема с simulair в моем ActiveX, которая зависла в IE. Мне удалось сделать обходной путь, позволив моему элементу ActiveX создавать новые потоки на клиенте. Даже если поток выполняет свою работу, activeX возвращает выполненное и разблокирует пользовательский интерфейс.

Самое сложное - узнать, когда закончится нить. Вы можете узнать по логическому свойству в вашем 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;
}
1 голос
/ 12 мая 2009

Это проблема многопоточности, связанная с IE, поэтому я не думаю, что есть способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...