У меня была проблема с 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;
}