Графика.FromHwnd(IntPtr.Zero) возвращает значение null, почему?

StackOverflow https://stackoverflow.com/questions/629365

  •  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 ценность - это именно то, чего я бы ожидал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top