工作線程中循環創建 CDialog 並調用 DoModal(),對話框閃退,線程數無限增長。
DoModal() 必須在擁有消息泵的 UI 線程調用。工作線程無消息循環,導致模態循環無法運行。Sleep(100) 間隔遠小於 DoModal() 執行時間,大量線程並發創建對話框,資源耗盡。// 工作線程發送消息給主線程
::PostMessage(hMainWnd, WM_USER_SHOW_DIALOG, 0, 0);
// 主線程消息處理
LRESULT CMainWnd::OnShowDialog(WPARAM, LPARAM) {
CMyDialog dlg;
dlg.DoModal(); // 安全
return 0;
}所有 UI 操作(創建窗口、彈出對話框、更新控件)必須在主 UI 線程執行。工作線程通過 PostMessage/SendMessage、AfpPostTask 等機制將 UI 任務分派給主線程。