Graphics.FromHwnd (IntPtr.Zero) retorna nulo, por quê?
-
08-07-2019 - |
Pergunta
Atualmente estou investigando um problema com um componente 3o partido (DevExpress) em meu aplicativo. A minha questão é bastante similar a esta DevExpress KB artigo . Eu recebo a mesma exceção com mais menos o mesmo stacktrace. Então eu usei .NET Reflector para descobrir, o que pode ser nulo neste cenário, e o único objeto que é uma candiate ser nula é Graphics. Este é criado com Graphics.FromHwnd (IntPtr.Zero). Porque eu não ter um amplo conhecimento sobre a GDI, eu gostaria de saber se alguém pode me dizer cenários possíveis quando este pode retornar nulo ...
Eu tentei reproduzi-lo em um cenário onde as janelas está fora do GDI alça de, mas então eu estou recebendo um "fora de alças" - exceção pelo menos uma vez, que não é o caso na edição Estou investigando
tia, Martin
Solução
Pelo que me lembro, um HWND de 0 (efetivamente IntPtr.Zero) é um identificador para o desktop do usuário atual sessão. Ele pode ser usado para medir várias métricas do sistema e deve ser um valor válido para Graphics.FromHwnd.
No entanto, GDI + é tão cheio de bugs ea integração .NET com ele é tão instável que é muito possível que não há nada de errado com seu código ou DevExpress diferente do que apenas utiliza GDI +.
Outras dicas
Em primeiro lugar, você está usando a estrutura IntPtr
e inicializando-lo a zero. Então você está passando esse identificador para a classe Graphics. A menos que você tem uma janela com uma handle == 0
, um valor null
é exatamente o que eu poderia esperar.