Dom InnerHTML何时立即执行?

Dom InnerHTML何时立即执行?,dom,vbscript,hta,Dom,Vbscript,Hta,我希望这个HTA代码打印a,稍后会被b取代。但是,它所做的是在一段时间内不打印任何内容,然后b。 启用MsgBox行后,它会首先打印a 似乎推迟了执行statusinfo.InnerHTML=“a”。谁能告诉我这是为什么?如何获得所需的行为(立即刷新) Sub doThis() statusinfo.InnerHTML=“a” 'MsgBox“停止” 强化手术 statusinfo.InnerHTML=“b” 端接头 次密集作业() “需要很长时间 端接头 跑 脚本和渲染在单个线程中执行。这意

我希望这个HTA代码打印
a
,稍后会被
b
取代。但是,它所做的是在一段时间内不打印任何内容,然后
b
。 启用MsgBox行后,它会首先打印
a

似乎推迟了执行
statusinfo.InnerHTML=“a”
。谁能告诉我这是为什么?如何获得所需的行为(立即刷新)


Sub doThis()
statusinfo.InnerHTML=“a”
'MsgBox“停止”
强化手术
statusinfo.InnerHTML=“b”
端接头
次密集作业()
“需要很长时间
端接头
跑

脚本和渲染在单个线程中执行。这意味着,
点此
将在渲染开始之前完成。同时,您已经将内部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
整理
点此
将释放线程。请注意,
setTimeout
不会停止执行,整个子进程将执行到底。之后,浏览器可以呈现页面

intensiveOperation
在渲染完成后的某个时间点调用,不早于给定的延迟,但可能要晚很多,具体取决于CPU当时正在执行的任务


问题标题中问题的答案基本上是:从不。

当您按顺序为任何变量指定两个不同的值时,只有最后一个值才是操作后的实际值。首先运行脚本,然后重新呈现页面。如果您想在第页上看到
a
b
,您必须使用方法延迟
intensiveOperation
,以便在执行新脚本之前呈现
a
。那么如何修改我的代码以获得所需的结果?我曾尝试使用
retval=window.setTimeout(“intensiveOperation”,2000,“VBScript”)
包装intensiveOperation,但它所做的唯一一件事是立即显示
b
,而不是在一段时间后显示。与2000年相同,而不是10年<代码>a从未显示。您的代码确实演示了我要求的行为。不过我也很想理解。我仍然不明白为什么将
statusinfo.InnerHTML=“b”
放在intensiveOperation()中显然与将其放在doThis()的底部有本质区别。在你的定义中,“脚本”是什么?潜艇?那么在代码中有两个线程在运行?为什么?“脚本”是“Sub”,是的。只有一根线
点调用时此
将执行到其末尾,这就是为什么需要将
b
移出子对象。
setTimeout
只是延迟执行
intensiveOperation
,它不会停止子对象,直到执行
intensiveOperation
为止。
设置超时
行之后的任何操作都将在
密集操作
之前执行
setTimeout
只是延迟其fn参数的执行,并且保证延迟至少为4毫秒,可能会更多,具体取决于CPU使用情况等。
Sub doThis
    statusinfo.InnerHTML = "a"
    Call window.setTimeout(GetRef("intensiveOperation"), 4)
End Sub

Sub intensiveOperation()
    'takes long
    statusinfo.InnerHTML = "b"
End Sub