问一个委托的问题
我在一个类里面声明的一个TimerCallback委托变量,然后把他传给一个计时器,如下:
public class SystemPowerManager
    {
        private Timer tmrGetPowerStatus;        private SYSTEM_POWER_STATUS_EX2 powStatus;        public TimerCallback GetPowerStatusCallback;        public SystemPowerManager()
        {
            GetPowerStatusCallback = GetSystemPowerStatus;
            tmrGetPowerStatus = new Timer(GetPowerStatusCallback, powStatus, 0, 2000);
        }        private void GetSystemPowerStatus(object status)
        {
            NativeMethods.GetSystemPowerStatusEx2(ref powStatus, (uint)Marshal.SizeOf(powStatus), false);
        }
    }
在构造函数里面给委托赋值,然后实例化timer,每隔两秒执行委托.然后我再一个窗口的Form_Load里面给这个委托添加一个注册方法:
powerManager.GetPowerStatusCallback += headbar.GetBatteryStatusCallback;
GetBatteryStatusCallback是HeadBar类的一个方法.
运行时每次可以调用PowerManager类的GetSystemPowerStatus方法,但是后来注册的方法总是不被执行,这是怎么回事??

解决方案 »

  1.   

            public SystemPowerManager()
            {
                GetPowerStatusCallback = GetSystemPowerStatus; <===== ?????
                tmrGetPowerStatus = new Timer(GetPowerStatusCallback, powStatus, 0, 2000);
            }powerManager.GetPowerStatusCallback += headbar.GetBatteryStatusCallback <==== ????;
      

  2.   

    GetPowerStatusCallback = GetSystemPowerStatus;//初始化委托变量,并注册一个方法powerManager.GetPowerStatusCallback += headbar.GetBatteryStatusCallback 
    在别的地方添加一个powerManager的GetPowerStatusCallback委托的方法注册
      

  3.   

    难道在SystemPowerManager类外面添加注册方法不行吗?额,我试过在SystemPowerManager类的够构造方法里给GetPowerStatusCallback委托添加一个本类的方法注册,结果是可以调用两个方法.public SystemPowerManager()
            {
                GetPowerStatusCallback = GetSystemPowerStatus;
                GetPowerStatusCallback += TimerCallbackTest;
                tmrGetPowerStatus = new Timer(GetPowerStatusCallback, powStatus, 0, 2000);
            }private void TimerCallbackTest(object status)
            {
                System.Threading.Thread.Sleep(1000);
            }
      

  4.   


           public class A
            {
                public EventHandler myEvent;
                public A()
                {
                    this.myEvent += MyMethod;
                }            public void MyMethod(object sender, EventArgs e)
                {
                    Console.WriteLine("A::MyMethod");
                }            public void Run()
                {
                    if (this.myEvent != null)
                    {
                        myEvent(this, null);
                    }
                }
            }        public class B
            {
                public B()
                {
                }            public void MyMethod(object sender, EventArgs e)
                {
                    Console.WriteLine("B::MyMethod");
                }
            }
                A a = new A();
                B b = new B();
                a.myEvent += b.MyMethod;
                a.Run();
      

  5.   

    多谢pptra了,我在计时器实例化之前注册所有的方法就没问题了,我感觉这个地方不太符合事件的概念,谢谢你的回复