アンマネージ コードの上にある (ほとんどの場合) Winforms UI であるアプリをデバッグしています。UI コードの一部は WinForms ではありません。DirectX を使用して、一部の Panel コンポーネントの表面に直接描画しています。そのために、コンポーネントの作成後にコンポーネントのウィンドウ ハンドルが記録され、この DirectX 表示を実行するモジュールが必要とするハンドル (GetWindowRect() など) を必要とする後続の呼び出しでは、このハンドルが使用されます。このメカニズムはしばらく前から存在していましたが、これから説明する問題は見られませんでしたが、運が良かっただけかもしれません。これを配置したプログラマーは、もう私には利用できません。
私が解決しようとしている問題は、非常に断続的に、この領域の表示が壊れることです。このルーチンは、バックグラウンド スレッドから呼び出されています。たとえば、GetWindowRect() の呼び出しが突然、描画の問題に付随してガベージ座標を返すことをアプリ ログで確認しました。Window ハンドル自体は破損しておらず、Windows データ構造を上書きしていないことは確かです。表示ストリームを停止して再開すると、GetWindowsRect() は同じ Windows ハンドルを使用して、適切な座標を再び返し始めます。
これが .NET レベルの場合は、Invoke を使用して描画をメイン スレッドに延期します。私の質問は、この DirectX 呼び出しに対して同じことを行う必要があるかどうかです。私は、バックグラウンド スレッドで描画しないことに関する Microsoft の警告を見つけようとしていました。誰でも私にこれを指摘できますか?
パソコン