Apache flex 分派事件是否会中断函数?
假设函数foo()正在执行。假设发生了一个外部事件,您有一个处理程序。是否会中断函数foo(),以便执行事件处理程序?在这种情况下执行的顺序是什么?这实际上有点棘手 我真的不知道Flash在这方面是如何工作的,但在C#中有几个例子。我建议你仔细看看这些东西是怎么工作的。另一个好方法是插入调试器并检查导致事件处理程序的堆栈,以了解其含义 基本上有两种情况之一:Apache flex 分派事件是否会中断函数?,apache-flex,flash,actionscript,flex3,Apache Flex,Flash,Actionscript,Flex3,假设函数foo()正在执行。假设发生了一个外部事件,您有一个处理程序。是否会中断函数foo(),以便执行事件处理程序?在这种情况下执行的顺序是什么?这实际上有点棘手 我真的不知道Flash在这方面是如何工作的,但在C#中有几个例子。我建议你仔细看看这些东西是怎么工作的。另一个好方法是插入调试器并检查导致事件处理程序的堆栈,以了解其含义 基本上有两种情况之一: 正如阿西克博士所说,您可以直接调用委托事件,这与同步调用方法完全相同。在本例中,关于线程上下文切换的常规规则适用,但实际上,事件没有特殊属
foo()
不会被中断
Flex是单线程的,因此
foo()
将继续运行。一旦foo()完成并将控制返回到事件循环,事件队列中的第一个事件将被处理。这是正确的,但让我澄清一下。Flash Player中的代码执行是单线程的。因此,Flex应用程序只在一个线程上运行。但是Flash Player中有一些东西是在不同的线程上运行的,比如网络IO,这样网络请求就不会阻塞UI。我恐怕这不是所有事件调度的情况。事件机制不是内在异步的。它归结为回调,真的。的确,玩家的API发送的大多数事件都是异步触发的,不过,就像用户手势、flash.net包等生成的事件一样。尽管如此,用户特定问题的答案仍然是“不,不会被中断”。在foo()完成之前,全新事件的用户事件处理程序仍然不会执行。我不同意。尝试调度事件,您将看到在执行foo时将调用处理程序。私有函数测试():void{var dispatcher:EventDispatcher=new EventDispatcher();dispatcher.addEventListener(Event.COMPLETE,function(e:Event):void{trace(“handleComplete”);};dispatcher.dispatchEvent(new Event(Event.COMPLETE));trace(“测试的最后一行”);}你的例子是正确的-我的评论没有完全传达我的主张。如果触发了某个外部事件(如原始问题所述),则我认为在当前例程完成之前不会处理该事件。如果foo()本身触发了一个事件,那么流将按照您所描述的方式进行—事件将立即在单个(主)线程上处理。我承认这是值得核实的。创建一个示例应用程序来试用它是非常简单的;如果我今天晚些时候有时间,我会这样做。这里有另一个“线程”是关于运行在单个线程中的Flex应用程序的:-James与问题无关。这个问题是针对flash播放器的。@bug-a-lot。但所描述的模型适用于flash播放器。