2

这是一个关于如何在 dart 中进行“多线程”的 dart 新手问题。

(对不起,我是一个老 Java 开发人员......)

所以我有这种代码(见下文),但由于重新创建 gui 的成本很高,所以我想推迟它,而不是在 _onWindowResize() 中重新创建 gui,我想在大小有的时候启动一个线程来执行此操作稳定了一段时间。例如一秒钟。

如果线程已经启动,则什么也不做。(顺便说一句,StageXL 很酷....)

(这也将修复 _onWindowResize() 被 dart: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();
}
4

1 回答 1

1

可以通过Isolates将工作发送到 Dart 中的其他线程,但这不适用于您的场景,因为它主要是关于修改应用程序的 UI。

不能在 Dart 中的隔离之间共享对象(或一般使用 WebWorkers)。所以你不能将画布传递给 Isolate 来创建你的舞台、渲染循环等。

如果您正在执行复杂的计算(例如物理),将这些计算发送到 Isolate 并使用结果来更新 UI 可能是有意义的。

于 2013-05-07T16:59:04.363 回答