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);
            }
  • 相关阅读:
    Python 类 元类 new之间的关系
    Scrapy Item类分析
    python中的可变参数和不可变参数
    简易python购物车
    关于Javascrip瀑布流深度解析
    python3.5 的str类型和bytes类型的转换
    php 扩展
    PHP开源网
    ElementUI中树形控件el-tree修改样式/添加title
    SVN 重命名文件夹
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/14080927.html
Copyright © 2011-2022 走看看