2012-10-23 44 views
3

我想让我的基于CDialog的应用程序关闭。我调用CWnd :: OnClose()然后调试器进入Windows系统文件。在调试器输出窗口中,我无限期地获取这些循环线。MFC对话框应用程序不关闭

线程'Win32 Thread'(0x1040)已退出,代码为0(0x0)。 线程'Win32线程'(0x2fa4)已退出,代码为0(0x0)。 线程'Win32 Thread'(0x1ca0)已退出代码0(0x0)。 'LifescanDatabaseApplication.exe':卸载'C:\ Windows \ SysWOW64 \ davclnt.dll' 'LifescanDatabaseApplication.exe':卸载'C:\ Windows \ SysWOW64 \ davhlpr.dll' 'LifescanDatabaseApplication.exe':Loaded'C :\ WINDOWS \ Syswow64资料\ davclnt.dll”,无法找到或打开PDB文件 'LifescanDatabaseApplication.exe':已加载 'C:\ WINDOWS \ Syswow64资料\ davhlpr.dll',无法找到或打开PDB文件

任何想法,我已经打破或我应该如何追踪它? 谢谢, James

编辑 对话框的函数OnClose()在这里显示;

void CApplicationDlg::OnClose() 
{ 
    UpdateData(TRUE); 
    if(AfxMessageBox(_T("Are you sure you want to close? If so, no more updates will be issued"),MB_YESNO)==IDYES) 
    { 
    Logger * instance = Logger::Instance(); 
    if(instance!=nullptr) 
    { 
     instance->writeToLogFile("Application shutdown."); 
    } 
     CWnd::OnClose(); 
    } 
} 

我已经通过调试器通过Cwnd :: OnClose()命令跟踪了这一点。问题是,代码没有回到调用对话框来运行EndDialog的部分。我想我已经改变了对话框代码中的其他地方,正在停止这项工作。

编辑2: 用this-> EndDialog(0)替换CWnd :: OnClose()似乎解决了这个问题,但这是令人担忧的。

回答

1

acutal问题是在按钮上的id的一些混淆,这意味着一个处理程序被调用,导致需要很长时间才能完成的方法运行。

修复了这一切,一切正常。感谢您的帮助,虽然