zoukankan      html  css  js  c++  java
  • Timer Tick 取消事件无效

    今天有朋友遇到了,Timer Tick取消事件无效的问题。

    归根结底还是使用了匿名函数。

    两个相同的匿名函数,其实指向的引用不一样。

    这就好比 

    Model m1=new Model();

    m1=new Model();  

    这两个Model 就不一样了。不是同一个对象。

    正确方法如下:将事件赋值,这样就能找到同一个引用对象。

    而不是匿名函数。

    System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
            public EventHandler eve;
            private void Form1_Load(object sender, EventArgs e)
            {
                eve = new System.EventHandler((aa, ee) => Tick(aa, ee, "111"));
                t.Interval = 3000;
                t.Tick += eve;
                t.Start();    //3秒弹一次111
            }
     
            private void Tick(object sender, EventArgs e, string str)
            {
                MessageBox.Show(str);
            }
     
            private async void button1_Click(object sender, EventArgs e)
            {
                t.Stop();
                t.Tick -= eve;
                t.Start();    //检查是否还会弹框111
            }

    这里就顺便,贴一下匿名函数的方法:

    System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
            private void Form1_Load(object sender, EventArgs e)
            {
                t.Interval = 3000;
                t.Tick += (s, ev) => Tick(s, ev, "111");
                t.Start();
            }
     
            private void Tick(object sender, EventArgs e, string str)
            {
                MessageBox.Show(str);
            }
  • 相关阅读:
    enum
    高可用复用类
    int 和 Integer 的区别
    MysqlMd5加密
    软件测试例子
    Wordcount
    大气登录页面
    生成二维码的JAVA
    多态的理解
    打印低头思故乡 java
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/14080927.html
Copyright © 2011-2022 走看看