这是关于如何在飞镖中进行“多线程”的飞镖新手问题。
(对不起,我是一位老java开发人员......)
所以我有这种代码(见下文)但是因为重新创建gui是昂贵的,我想推迟它,以便不是在_onWindowResize()中重新创建gui我想启动一个执行此操作的线程大小一直稳定。例如。一秒钟。
如果线程已经启动,则不执行任何操作。 (顺便说一句,StageXL很酷......)
(这也将修复dart调用_onWindowResize()两次的错误:html ...)
...
html.window.onResize.listen((e) => _onWindowResize());
}
_createGui() {
var shape = new Shape();
shape.graphics.ellipse(html.window.innerWidth / 2, html.window.innerHeight / 2, html.window.innerWidth / 4, html.window.innerHeight / 4);
shape.graphics.fillColor(Color.Red);
stage.addChild(shape);
}
void _onWindowResize() {
print("New window size ${html.window.innerWidth}x${html.window.innerHeight}");
stage = new Stage('stage', canvas);
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
renderLoop = new RenderLoop();
renderLoop.addStage(stage);
juggler = renderLoop.juggler;
_createGui();
}
答案 0 :(得分:1)
可以通过Isolates将工作发送到Dart中的其他线程,但这不适用于您的场景,因为它主要是关于修改应用的UI。
无法在Dart中的隔离区之间共享对象(或者通常使用WebWorkers)。所以你不能将画布传递给Isolate来创建你的舞台,renderloop等等。
如果您正在进行复杂的计算(例如,物理),将它们发送到隔离区并使用结果更新UI可能是有意义的。