Скрипты и рендеринг выполняются в одном потоке. Это означает, что doThis
будет завершен до начала рендеринга. Между тем, вы установили внутренний HTML в 'b', и это будет единственным результатом, который вы увидите.
Чтобы исправить это, вы должны завершить первый суб и вызвать intensiveOperation
с короткой задержкой и сделать окончательное обновление HTML в конце второго юнита, например:
Sub doThis
statusinfo.InnerHTML = "a"
Call window.setTimeout(GetRef("intensiveOperation"), 4)
End Sub
Sub intensiveOperation()
'takes long
statusinfo.InnerHTML = "b"
End Sub
Завершение doThis
освободит поток. Обратите внимание, что setTimeout
не остановит выполнение, весь юг будет выполнен до конца. После этого браузер может отобразить страницу.
intensiveOperation
вызывается в какой-то момент после завершения рендеринга, не раньше, чем данная задержка, но, возможно, намного позже, в зависимости от задач, которые CPU делает в это время .
Ответ на вопрос в заголовке вопроса в основном: никогда.