定时器的使用,该如何解决

定时器的使用
在一个对话框(CAllDeviceStatus)中用到定时器

开始是在构造函数中启动定时器
CAllDeviceStatus::CAllDeviceStatus(CWnd*   pParent   /*=NULL*/)
:   CDialog(CAllDeviceStatus::IDD,   pParent)
{
//{{AFX_DATA_INIT(CAllDeviceStatus)
//   NOTE:   the   ClassWizard   will   add   member   initialization   here
//}}AFX_DATA_INIT

m_UpdateTimerID=SetTimer(1,2000,UpdateStatus);//

}

在另外一个地方调用显示该对话框
  CAllDeviceStatus   DeviceStatusDlg;
  DeviceStatusDlg.DoModal();

每次在弹出窗体前都出现Debug   Assert   Failed!页面,要求终止程序。

后来改在OnInitDialog中启动定时器就正常了

BOOL   CAllDeviceStatus::OnInitDialog()  
{
m_UpdateTimerID=SetTimer(1,2000,UpdateStatus);//
}

不知道是什么原因??




------解决方案--------------------
_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD))
{ ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
lpfnTimer); }

上面是SetTimer的代码,由此可见Timer是和一个窗口捆定在一起的,在Constructor中类还没有构造完成,更别提窗口了,ASSERT(::IsWindow(m_hWnd)); 这个地方会退出程序。

而在OnInitDialog中窗口已经建立完毕,因此没有问题。
------解决方案--------------------
构造函数执行的时候,窗体还没创建,定时器自然就绑不上去了