Graphics.FromHwnd (IntPtr.Zero) restituisce null, perché?
-
08-07-2019 - |
Domanda
Attualmente sto esaminando un problema con un componente di terze parti (DevExpress) nella mia applicazione. Il mio problema è abbastanza simile a questo articolo DevExpress KB . Ottengo la stessa eccezione con più meno lo stesso stacktrace. Quindi ho usato .NET Reflector per scoprire cosa potrebbe essere nullo in questo scenario e l'unico oggetto che è un candidato ad essere nullo è Graphics. Questo viene creato con Graphics.FromHwnd (IntPtr.Zero). Poiché non ho una vasta conoscenza di GDI, vorrei sapere se qualcuno può dirmi possibili scenari quando questo può restituire null ...
Ho provato a riprodurlo in uno scenario in cui Windows è fuori dagli handle GDI, ma poi sto ottenendo un "fuori dagli handle". - eccezione almeno una volta, che non è il caso del problema su cui sto indagando
tia, Martin
Soluzione
Da quello che ricordo, un HWND di 0 (in effetti IntPtr.Zero) è un handle per il desktop della sessione dell'utente corrente. Può essere utilizzato per misurare varie metriche del sistema e dovrebbe essere un valore valido per Graphics.FromHwnd.
Tuttavia, GDI + è così pieno di bug e l'integrazione .NET con esso è così instabile che è molto probabile che non ci sia nulla di sbagliato nel codice o in DevExpress oltre a utilizzare GDI +.
Altri suggerimenti
Prima di tutto, stai usando la struttura IntPtr
e la stai inizializzando a zero. Quindi si passa questo handle alla classe Graphics. A meno che tu non abbia una finestra con un handle == 0
, un valore null
è esattamente quello che mi aspetterei.