Графика.FromHwnd(IntPtr.Zero) возвращает значение null, почему?
-
08-07-2019 - |
Вопрос
В настоящее время я расследую проблему со сторонним компонентом (DevExpress) в моем приложении.Моя проблема очень похожа на эту Статья DevExpress KB.Я получаю то же самое исключение с более или менее одинаковым stacktrace.Итак, я использовал .NET Reflector, чтобы выяснить, что может быть нулевым в этом сценарии, и единственный объект, который может быть нулевым, - это Графика.Это создано с помощью графики.FromHwnd(IntPtr.Zero).Поскольку у меня нет обширных знаний о GDI, я хотел бы знать, может ли кто-нибудь подсказать мне возможные сценарии, когда это может вернуть значение null...
Я попытался воспроизвести это в сценарии, когда Windows находится вне дескриптора GDI, но затем я получаю исключение "out of handles" по крайней мере один раз, чего нет в проблеме, которую я расследую
тиа, Мартин
Решение
Насколько я помню, HWND, равный 0 (фактически IntPtr.Zero), является дескриптором рабочего стола текущего сеанса пользователя.Его можно использовать для измерения различных показателей системы, и оно должно быть допустимым значением для графики.Изhwnd.
Однако GDI + настолько полон ошибок и .СЕТЕВАЯ интеграция с ним настолько нестабильна, что вполне возможно, что в вашем коде или DevExpress нет ничего плохого, кроме того, что он просто использует GDI +.
Другие советы
Прежде всего, вы используете IntPtr
структура и инициализация ее равным нулю.Затем вы передаете этот дескриптор классу Graphics.Если только у вас нет окна с handle == 0
, а null
ценность - это именно то, чего я бы ожидал.