timer失踪之谜

timer失踪之谜
今天下午,写了一个小程序,来测试一下WCF。小项目中有一个客户端,轮询通过服务查找最新的订单。
在程序中,我首先使用了System.window.forms.form.timer控件+backgroundWork控件 和 System.Threading.timer来实现。BackgroundWork有一段时间没有用了,但通过查找MSDN,仍然实现了。
但是在用System.Threading.timer来实现的时候,出现了几个小问题。一个是在写委托delegate的时候,老是提示方法不匹配。调试半天,才发现我把委托实现在方法外,变成了这样的:
class test
{
    Delegate void changeUIDelegate(Order[] source);
    changeUIDelegate delegateMethod=new changeUIDelegate(changeMethod);
    void changeMethod(Order[] source)
    {
        //change the ui.
    }
}
就这个问题浪费了近半个小时,唉,太粗心了。
第二个问题更是愚蠢到了极点,在客户端的Form_Load方法里面,我是这样写的
protect void Form1_Load(...)
{
    TimerBack back=new TimerBack(otherMethod);
    //每隔三秒执行一下otherMthod
    Threading.Timer=new Timer(back,null,0,3000);
}
可是奇怪的事情发生了,Timer执行了2-3次之后,变停止了。我调试了半天找不到原因,我起初认为是线程死锁,在otherMethod中加了同步控制,仍然是这种情况。郁闷。
最后,在网上狂google了一番,终于发现了原委:我犯了一个十分低级的错误,竟然把timer作为一个局部变量,在Formlaod执行完之后,timer就被内存回收了。
终于豁然开朗............
郁闷了一下午。
posted @ 2008-07-17 23:29  binlib  阅读(303)  评论(0编辑  收藏  举报