Graphics.FromHwnd(IntPtr.Zero)はnullを返します、なぜですか?
-
08-07-2019 - |
質問
現在、アプリケーションのサードパーティコンポーネント(DevExpress)の問題を調査しています。 私の問題は、この DevExpress KBの記事によく似ています。同じ例外が発生しますが、スタックトレースは同じです。 そこで、.NET Reflectorを使用して、このシナリオでnullになる可能性のあるものを見つけました。nullになる可能性のある唯一のオブジェクトはGraphicsです。 これは、Graphics.FromHwnd(IntPtr.Zero)で作成されます。私はGDIに関する幅広い知識を持っていないので、誰かがこれがnullを返す可能性のあるシナリオを教えてくれるかどうか知りたいです...
WindowsがGDIハンドルの範囲外にあるシナリオでそれを再現しようとしましたが、「ハンドルがありません」というメッセージが表示されます。 -少なくとも1回は例外。これは調査中の問題には当てはまりません
tia、 マーティン
解決
思い出すと、0のHWND(事実上IntPtr.Zero)は、現在のユーザーセッションのデスクトップへのハンドルです。システムのさまざまなメトリックを測定するために使用でき、Graphics.FromHwndの有効な値である必要があります。
ただし、GDI +には非常に多くのバグがあり、GDI +との.NET統合は非常に不安定であるため、GDI +を使用する以外にコードやDevExpressに問題はない可能性があります。
他のヒント
まず、 IntPtr
構造を使用して、ゼロに初期化します。次に、このハンドルをGraphicsクラスに渡します。 handle == 0
のウィンドウがない限り、 null
の値はまさに私が期待するものです。