2013-04-28 50 views
2

这是一个关于如何在飞镖中执行“多线程”的飞镖新手问题。如何不使用线程

(打扰一下,我是一个老Java开发者...)

所以我有这样的代码(参见下文),但由于重新创建GUI是昂贵的,我想推迟它,这样,而不是重建_onWindowResize()中的gui我想开始一个线程,在大小稳定一段时间时执行此操作。例如。一秒钟。

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

(这也将修复_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

注意:这是一个糟糕的例子,因为我发现stagexl对我来说或多或少地做了这些......但无论如何这个问题是通用的。 – 2013-04-28 08:23:51

回答

1

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

一个不能在Dart中的分离物之间共享对象(或者通常使用WebWorkers)。所以你不能通过画布到一个孤立来创建你的舞台,renderloop等

如果你正在做复杂的计算(例如物理),它可能是有道理的发送到一个孤立,并使用结果更新用户界面。