C#中关于事件定阅的问题?
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
          }        void SystemEvents_TimeChanged(object sender, EventArgs e)
        {
            MessageBox.Show("时间已更改");
        }//其他代码略...问题:
1.当事件发生时,会出现两个MessageBox("时间已更改"),为什么?2.直接更改MessageBox中的内容如改为MessageBox.Show("哈哈"),F5运行后仍然是MessageBox.Show("时间已更改"),除非在加上SystemEvents.TimeChanged -= new EventHandler(SystemEvents_TimeChanged)再加上SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);才会MessageBox("哈哈"),为什么?3.怎么判断一个事件是否已定阅?
if(SystemEvents.TimeChanged != null)
{
//这样?
}

解决方案 »

  1.   

    1.在编译器自动生成的代码之中可能已经包含了
    SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
    你可以检查一下
    2.重新生成方案应该可以解决显示信息不变的问题,至于你所说的情况,很可能就是在×××.Designer.cs里面已经定义了
    SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
    3.自己定义一个bool变量,订阅之后改为true以上为个人理解
      

  2.   

    嗯,你看看InitializeComponent();里面的代码,其实里面已经订阅事件了;
      

  3.   

    InitializeComponent();里面的代码,并没有订阅件啊
    我是这么想的:
    窗体第一次显示时订阅了一次事件,MessageBox单击确认后,焦点回到主窗体导致窗体又重绘一次,调用造函数,于是又订阅了一次事件???
    ///////////////////////

              SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
    放到Button_Click事件(单击一次)里,有时也会MessageBox两次?
      

  4.   

    SystemEvents.TimeChanged  他是一个静态的
    所以在添加添加前检查是否有订阅