none
关于timer的问题 RRS feed

  • 问题

  • system.timers.timer类

    在一个页面中建一个timer

    protected void Page_Load(object sender, EventArgs e)

    {

        system.timers.timer t = new System.Timers.Timer(300000);

                    t.Elapsed += new System.Timers.ElapsedEventHandler(dotimer);    

                    t.AutoReset = false;  

                    t.Enabled = true;

    }

     

    public void dotimer(object source, System.Timers.ElapsedEventArgs e)

        {       

    //方法处理

        }

    ---以上页面被释放调后---

    public void removetimer()

        {       

    //我要在这个方法中取消timer的执行,请问有办法吗?

        }


     

     

    2010年8月31日 10:50

答案

全部回复

  • 你好

     

    或者你可以嘗試以下的CODE

      system.timers.timer t = new System.Timers.Timer(300000);

    protected void Page_Load(object sender, EventArgs e)

    {

     

                    t.Elapsed += new System.Timers.ElapsedEventHandler(dotimer);    

                    t.AutoReset = false;  

                    t.Enabled = true;

    }

    public void removetimer()

        {       

     t.Enabled = false;

        }

    Please correct me if my concept is wrong

     


    Chi
    2010年8月31日 11:31
  • 谢谢

    ---以上页面被释放调后---!!!

    这个时候 t 已经不能引用!!

    public void removetimer()

        {       

    //我要在这个方法中取消timer的执行,请问有办法吗?

        }

    2010年8月31日 11:44
  • 你好

    不好意思 我的中文不好, 看不懂以上页面被释放调后-是什麼意思

    是你的頁由A頁轉到去B頁? 還是 什應?

    system.timers.timer t ;//把他放到最上, 他的SCOPE 會是全個PAGE 的, 所以在removetimer() 應該會看到這個t 的

    protected void Page_Load(object sender, EventArgs e)

    {

     IF(!IsPostBack){ //加了這句,
    t= new System.Timers.Timer(300000);

                    t.Elapsed += new System.Timers.ElapsedEventHandler(dotimer);    

                    t.AutoReset = false;  

                    t.Enabled = true;

    }

    }

    public void removetimer()

        {      
    if(t !=null){ //要看看 這個 t 是否返存在

     t.Enabled = false;

    }

        }

    Please correct me if my concept is wrong

     


    Chi
    2010年8月31日 12:21
  • 不好意思我表述不清楚

    这个页面,在第一个页面周期(life circle)中,生成了t,设置了interval。然后页面周期完成(after unload()),页面资源被释放。

    如果此时再进入该页面,也会生成一个t,但是这个t不是前一个t。

    有办法对前一个t,取消它的执行吗?也可以把问题可以理解为:a页产生的timer,要在b页把它取消.

     

    2010年8月31日 12:42
  • 你好

    明白了

    我覺得當離開了第一個頁面後, 當他去到第二個頁面時 第一個頁的 t 自然會去 Garbage collection 的, 所以不用自行取消他

    我也不太肯定了, 希望其他高人可以解釋解釋,

    Please correct me if my concept is wrong


    Chi
    2010年8月31日 12:52
  • 谢谢

    t是去了 Garbage collection ,但是interval委托的事件被放到了线程中,并没有取消

    2010年8月31日 13:08
  • 你要是想实现这样的功能的话,应当在Global里进行定义,或者放 Cache里。全局变量才能被其他页面共用
    【孟子E章】
    2010年9月1日 0:54
    版主
  • 那么释放线程可以否?
    2010年9月1日 1:53
  • 谢谢

    请问具体怎样才能让全局变量被其他页面共用呢

    2010年9月2日 11:16
  • 谢谢

    请问具体怎样才能让全局变量被其他页面共用呢

    Global里 的Application_Start 里定义 一个Application["test"]

    所有的页面都可以访问到Application["test"]

    2010年9月5日 3:58
  • 无论timer控件放在哪里,只要您确定您要取消timer运行的地方可以获得当前使用的timer控件的实例,就可以使用Enabled = false;取消掉
    2010年9月6日 2:43