我正在調試一個在其消息循環中調用IsDialogMessage()的應用程序。偶爾,IsDialogMessage()永遠不會返回(永遠不會超過1小時的間隔)。根據Microsoft的符號服務器提供的user32.dll符號,它似乎卡在GetNextDlgGroupItem()(或同一個內部變體)中,迭代了一些窗口集。爲什麼IsDialogMessage()永遠不會返回?
該應用程序是多線程的,並經常接收外部事件的通知,這些事件以DCOM調用的形式到達。我懷疑這樣的調用是以錯誤的方式處理某種窗口狀態的。如果我能夠知道什麼樣的狀態腐敗可能導致IsDialogMessage()中的無限循環,我想我會更容易地識別腐敗的來源。
這是可能的;有很多控件在使用,有些可能會被禁用。 – 2009-11-12 00:48:49