Адаптируйте ответные роли для окружающей среды

Скрипты и рендеринг выполняются в одном потоке. Это означает, что 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 делает в это время .

Ответ на вопрос в заголовке вопроса в основном: никогда.

13
задан Mxx 2 January 2014 в 16:27
поделиться