我正在調試一個應用程序(主要是)在非託管代碼上的Winforms UI。一些UI代碼不是WinForms:它使用DirectX直接繪製到某些Panel組件的表面上。爲此,組件的窗口句柄在創建後會被記錄下來,並且任何後續調用都需要使用執行此DirectX顯示的模塊(例如GetWindowRect())的句柄來使用此句柄。這種機制已經存在了一段時間,沒有看到我要描述的問題,雖然也許我們只是幸運。把它放在適當位置的程序員已經不在我身邊了。使用Windows句柄使bgnd線程的DirectX調用安全嗎?
我想解決的問題是,非常間歇地,該區域的顯示被破壞。這個例程從後臺線程調用。例如,我在應用程序日誌中看到,對GetWindowRect()的調用會突然並伴隨繪圖問題返回垃圾座標。窗口句柄本身沒有被破壞,我相當確定我們沒有覆蓋Windows數據結構;我可以停止並重新啓動我們的顯示流,並且GetWindowsRect()將使用相同的Windows句柄重新開始返回良好的座標。
如果這是在.NET級別,我會使用Invoke將draw延遲到主線程。我的問題是,我們是否應該爲這個DirectX調用做同樣的事情?我試圖找到微軟有關不在後臺線程中繪圖的警告,以提醒自己是否擴展到使用Windows手柄;任何人都可以指向我嗎?
PC