在控制台工程中,调用系统的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不被系统调用呢?

请帮忙看看,谢谢了。
...全文
248 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jx0797 2007-07-19
  • 打赏
  • 举报
回复
设定窗口和间隔后,会按时发送WM_TIMER消息给窗口
qubo 2007-07-19
  • 打赏
  • 举报
回复
控制台工程中没有消息处理循环,而Form工程(Windows Application)已经封装好了消息循环,所以有了这个现象。
以上的理解正确吗?
qubo 2007-07-19
  • 打赏
  • 举报
回复
没人知道吗?
qubo 2007-07-19
  • 打赏
  • 举报
回复
to jx0797(...):控制台程序没有窗口,所以第一个参数没有设定。
SetTimer(IntPtr.Zero, 0, 1000, Cb);
qubo 2007-07-18
  • 打赏
  • 举报
回复

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧