2012-10-23 71 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的一些混淆,這意味着一個處理程序被調用,導致需要很長時間才能完成的方法運行。

修復了這一切,一切正常。感謝您的幫助,雖然