如以下语句,我注册后 但可能在一个方法中会被重复调用.如果重复注册没必要.如何判断此事件已经被注册过了呢?或有其它的办法?谢谢
ExperimentManager.Instance.refreshUI += new ExperimentManager.RefreshUI(Instance_refreshUI);

解决方案 »

  1.   

    写成这样问题不就解决了ExperimentManager.Instance.refreshUI -= new ExperimentManager.RefreshUI(Instance_refreshUI);
    ExperimentManager.Instance.refreshUI += new ExperimentManager.RefreshUI(Instance_refreshUI);
      

  2.   

    ExperimentManager.Instance.refreshUI -= new ExperimentManager.RefreshUI(Instance_refreshUI);
    ExperimentManager.Instance.refreshUI += new ExperimentManager.RefreshUI(Instance_refreshUI);注册之前先-=下
      

  3.   

    可以通过反射获得,比如如下代码可以判断一个Form是否绑定过Load事件,已经绑定的方法名是什么
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Reflection;
    namespace WindowsApplication19
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            this.Load+=new EventHandler(Form1_Load1);
                this.Load+=new EventHandler(Form1_Load2);            PropertyInfo propertyInfo = (typeof(Form)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
                EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(this, null);
                FieldInfo fieldInfo = (typeof(Form)).GetField("EVENT_LOAD", BindingFlags.Static | BindingFlags.NonPublic);            Delegate d = eventHandlerList[fieldInfo.GetValue(null)];            if (d != null)
                {
                    foreach (Delegate de in d.GetInvocationList())
                        Console.WriteLine(de.Method.Name);
                }
            }
            private void Form1_Load1(object sender, EventArgs e)
            {
                //什么也不干
            }
            private void Form1_Load2(object sender, EventArgs e)
            {
                //什么也不干
            }
        }
    }
      

  4.   

    放一个list或者hashtable,没添加一次事件就记录个名称,下次注册时先判断是否有这个名称
      

  5.   

    1、先移动再注册(-= +=)
    2、定义一个泛型 类型 add 之前先判断