日期:2014-05-18  浏览次数:20794 次

委托调用的问题
问一个委托的问题
我在一个类里面声明的一个TimerCallback委托变量,然后把他传给一个计时器,如下:
C# code
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方法,但是后来注册的方法总是不被执行,这是怎么回事??


------解决方案--------------------
public SystemPowerManager()
{
GetPowerStatusCallback = GetSystemPowerStatus; <===== ?????
tmrGetPowerStatus = new Timer(GetPowerStatusCallback, powStatus, 0, 2000);
}

powerManager.GetPowerStatusCallback += headbar.GetBatteryStatusCallback <==== ????;