在控制台工程中,调用系统的SetTimer函数,为何登录的callback不被系统调用呢?
qubo 2007-07-18 03:37:53 [例子功能]
在C#中调用windows API SetTimer,自定义回调函数实现简单功能。
windows API SetTimer定义如下:
UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);
[C#代码]
下面是控制台程序:
class TimerCallbackTest
{
public TimerCallbackTest()
{
Console.WriteLine("new TimerCallbackTest");
Cb = new TimerProc(this.OnTickTimer);
}
~TimerCallbackTest()
{
Console.WriteLine("delete TimerCallbackTest");
}
private delegate void TimerProc(IntPtr hWnd, uint nMsg, int nIDEvent, int dwTime);
[DllImport("user32")]
private static extern int SetTimer(IntPtr hwnd, int nIDEvent, int uElapse, TimerProc CB);
[DllImport("user32")]
private static extern int KillTimer(IntPtr hwnd, int nIDEvent);
private int ID_CB_Timer = 0;
private int Cnt_CB_Timer = 0;
private TimerProc Cb = null;
public void startTimer()
{
Console.WriteLine("startTimer");
ID_CB_Timer = SetTimer(IntPtr.Zero, 0, 1000, Cb);
}
public void stopTimer()
{
Console.WriteLine("stopTimer");
KillTimer(IntPtr.Zero, this.ID_CB_Timer);
}
private void OnTickTimer(IntPtr hWnd, uint nMsg, int nIDEvent, int dwTime)
{
Console.WriteLine("OnTickTimer=[{0}]", ++Cnt_CB_Timer);
}
}
static void Main(string[] args)
{
TimerCallbackTest tct = new TimerCallbackTest();
tct.startTimer();
Console.ReadLine();
tct.stopTimer();
}
[相关信息]
1.程序运行后,OnTickTimer函数不被调用;
2.如果把上述代码放到Form工程(Windows Application)中,OnTickTimer函数就被调用了
[问题]
在控制台工程中,调用系统的SetTimer函数,为何登录的callback不被系统调用呢?
请帮忙看看,谢谢了。