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);
            }
  • 相关阅读:
    cmb 命令
    一个Cookie登录的示例
    webApp开发流程
    17-8-26-WebApp总结
    通过安装WordPress来搭建lamp开发环境
    Windows修改保存txt文件的默认字符集
    js在客户端创建js可读xml
    eclipse常用快捷键
    Express -api参考
    安装ubuntu kylin时问题解决
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/14080927.html
Copyright © 2011-2022 走看看