1
我有一個簡單的CMFCRibbonProgressBar和一個線程,它在長時間的操作過程中調用SetPos(value,TRUE)。 的問題是,在調試模式下它WINCORE.CPP斷言這一點:如何從不同的線程調用CMFCRibbonProgressBar方法?
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
我通過在該文件中,我不應該從不同的線程中調用它,因爲它可能是危險的意見理解。 我的問題是如何獲得一個線程來更新進度條的位置? 我很想試着忽略這個斷言,並繼續在發佈模式,但這是非常邪惡的...
有什麼建議嗎?
不,它不是MFC,也不難看。事實是,從不同於創建它的線程處操作窗口是一個禁忌。正確的策略是以某種方式將更新請求發送到UI線程(發佈WM_USER + x是個好主意),並讓處理程序找出如何完成任務。無論如何,工作人員不應該知道你的用戶界面的細節。 –
工作人員不知道有關UI的任何信息,它只獲取指向具有SetTotal和SetAmountCompleted的接口IProgressNotification的指針。 CMFCRibbonProgressBar派生類繼承自那個和所述功能區進度條。實際上,實際的工作線程是在一個單獨的庫中,並不知道任何MFC。正如你可以看到的問題是,這個派生類接收通知,然後更新用戶界面,這是MFC不喜歡的。相反,現在我必須參與一些CWnd的骯髒業務,這隻會增加複雜性:/ –