问一个委托的问题
我在一个类里面声明的一个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方法,但是后来注册的方法总是不被执行,这是怎么回事??
我在一个类里面声明的一个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方法,但是后来注册的方法总是不被执行,这是怎么回事??
{
GetPowerStatusCallback = GetSystemPowerStatus; <===== ?????
tmrGetPowerStatus = new Timer(GetPowerStatusCallback, powStatus, 0, 2000);
}powerManager.GetPowerStatusCallback += headbar.GetBatteryStatusCallback <==== ????;
在别的地方添加一个powerManager的GetPowerStatusCallback委托的方法注册
{
GetPowerStatusCallback = GetSystemPowerStatus;
GetPowerStatusCallback += TimerCallbackTest;
tmrGetPowerStatus = new Timer(GetPowerStatusCallback, powStatus, 0, 2000);
}private void TimerCallbackTest(object status)
{
System.Threading.Thread.Sleep(1000);
}
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();