2

我想在applicationComplete发生 之前获取命令行参数applicationComplete="init()。在init()我想使用那些命令行参数,但似乎onInvoke是在init(). 目前我有onInvokeapplicationComplete在我main.mxml的以下顺序。

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx"
                   xmlns:noxaos="com.someplace.*"
                   xmlns:skins="skins.*"
                   invoke="onInvoke(event)"
                   applicationComplete="init()"
                   width="400"
                   height="600">
4

1 回答 1

1

您不能通过更改属性顺序来更改执行顺序。

实际上,invoke事件通常在事件之前触发,但是applicationCompleteWindowedApplication将其排队,直到窗口被添加到舞台。

如果您需要在更早的阶段响应invoke事件,那么您必须直接订阅调度对象,这将是NativeApplication类。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeApplication.html#event:invoke

NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, invokeHandler);

但是,不能保证事件invoke会更早分派,因此为了避免可能的竞争条件,您应该仅invoke在分派后进一步处理。

您可以通过例如invoke直接在applicationComplete处理程序中订阅事件来管理它,并将所有内容从那里移动到invoke处理程序中。这应该可以正常工作,因为invoke事件正在排队并且将在订阅后直接触发。

于 2013-07-28T20:14:17.470 回答