flex 4.0 解决在MODULE中使用timer实时刷新数据,卸载MODULE后还在执行的问题

本文探讨了在Flex中使用ModuleLoader加载Module时遇到的问题,特别是关于如何正确处理Module内部的Timer,确保即使Module被卸载后,由Timer触发的函数也能正确停止执行。此外,还提到了一些在特定情况下可能遇到的奇怪错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用moduleloader加载module模块时,如果module模块中使用timer来控制执行某函数,当module被卸载后,timer控制执行的函数仍在执行。如:
主应用程序为index.mxml(包含加载module的moduleloader控件),被加载的module为mo_test.swf(mo_test.mxml)
在mo_test.mxml中使用timer
mo_test.mxml中:

某函数中{

timer.addEventListener("timer", timerHandler);
timer.start();

}


public function timerHandler(e:TimerEvent):void

{

执行代码A

}


解决方法:
在主应用程序中定义全局变量保存module的状态,即当前是否被加载。然后在timerHandler中调用判断
index.mxml中:

public var moduleState:Boolean=false;


.......


//并在加载module前将moduleState设置为true

this.moduleState=true;


.........

//在切换moduleloader中的module时或卸载module时将moduleState设置为false

this.moduleState=false;

mo_test.mxml中:


某函数中{

timer.addEventListener("timer", timerHandler);
timer.start();

}


public function timerHandler(e:TimerEvent):void

{

if(!this.parentApplication.moduleState)

{

timer.stop();

return;

}

执行代码A

}

到现在,当mo_test被卸载以后,timerHandler已经不再执行了。但当再次加载mo_test的时候有可能报错:
错误:无法将 Object@ce19af1 转换为 mx.messaging.messages.IMessage
具体是什么原因没仔细推敲。
解决方法:在index.mxml中添加代码如下:

import mx.messaging.messages.RemotingMessage;
private var rm:RemotingMessage;//只是定义一下就好了。很莫名奇妙的问题,在module中使用datagrid和tabnavigater时也有些类似的解决方案。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值