UINT  WaitDlgProc( LPVOID pParam )
{
m_Event.SetEvent();
CWaitDlg WaitDlg;
WaitDlg.DoModal();
return 0;
}void CPropPage1::OnOK()
{

::AfxBeginThread(WaitDlgProc,NULL,0,0,0,NULL);
::WaitForSingleObject(m_Event.m_hObject,INFINITE);当运行到WaitDlg.DoModal()的时候,没有进入CWaitDlg::InitDialog().程序运行时,没有弹出应该有的对画框。。关闭的时候, 会弹出Debug Assertion Failed!

解决方案 »

  1.   

    WaitDlg 是局部变量,出范围就释放了
      

  2.   

    应该是可以的。另外你的m_Event是全局的?
      

  3.   

    WaitDlg 中有用到什么特别的控件吗?因为是在工作线程中打开,所以可能会需要某些初始化工作
      

  4.   

    看看你的WaitDlg对话框的OnInitDialog函数中是否有异常
      

  5.   

    在类WaitDlg的onok和oncancel等里面加上资源释放等
      

  6.   

    BOOL CWaitDlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here
    GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);
    SetTimer(1,3*1000,NULL);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }void CWaitDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    CWaitDlg::OnOK();
    CDialog::OnTimer(nIDEvent);
    }
      

  7.   

    添加子窗口要添加一个窗口类Cdialog,在子窗口中确实没有初始化函数,不过可以像主窗口一样写一个啊,但是要正确添加,这样就能实现初始化了。
      

  8.   

        CWaitDlg WaitDlg;
        WaitDlg.DoModal();直接执行完了 这个CWaitDlg也就自动没了,你可以把它定义成全局变量,类成员变量,或者写成
    CWaitDlg *WaitDlg=new CWaitDlg;
    WaitDlg->DoModal();
      

  9.   

    你代码应该没有问题的
    现在可能出错的地方就是你那m_Event,贴点你关于m_Event这事件的代码上来看看楼上几位说什么WaitDlg是局部变量,根本这部分是没问题的
      

  10.   

    Debug下打开call  stack看看哪个函数抛出异常。
      

  11.   

    CWaitDlg是不是局部变量没有任何关系,问题就出现在m_Event中,按照名字这个是成员变量吧,改成全局
      

  12.   

    不是局部变量的问题,DoModal()运行的时候,根本没有返回,除非按了IDOK或IDCANCEL才返回。建议在DoModal()处设置一个断点,然后,step by step的调试。看在哪里出现错误了。
      

  13.   

    抱歉,学艺不精,对话框不需要建立消息循环,有操作系统负责处理对话框消息,这种问题以前也遇到过,原因是在新线程里调用了属于主线程窗口的类的MFC函数,不知你这次是不是这个问题,已经贴出的代码没有发现有什么问题