Graphics.FromHwnd (IntPtr.Zero) возвращает ноль, почему? - PullRequest
0 голосов
/ 10 марта 2009

В настоящее время я изучаю проблему со сторонним компонентом (DevExpress) в моем приложении. Моя проблема очень похожа на эту статью DevExpress KB . Я получаю то же исключение с более менее та же трассировка стека. Поэтому я использовал .NET Reflector, чтобы выяснить, что может быть нулевым в этом сценарии, и единственный объект, который является кандидатом на нулевое значение, это Graphics. Это создается с помощью Graphics.FromHwnd (IntPtr.Zero). Поскольку у меня нет широких знаний о GDI, я хотел бы знать, может ли кто-нибудь рассказать мне возможные сценарии, когда это может вернуть ноль ...

Я пытался воспроизвести его в сценарии, в котором окна выходят из дескриптора GDI, но затем я получаю «из дескрипторов» - исключение, по крайней мере, один раз, чего не происходит в исследуемой мной проблеме

ТИА, Martin

Ответы [ 2 ]

0 голосов
/ 30 апреля 2010

Насколько я помню, HWND 0 (фактически IntPtr.Zero) является дескриптором рабочего стола текущего сеанса пользователя. Он может использоваться для измерения различных метрик системы и должен быть допустимым значением для Graphics.FromHwnd.

Однако GDI + полон ошибок, и интеграция .NET с ним настолько нестабильна, что вполне возможно, что в вашем коде или DevExpress нет ничего плохого, кроме того, что он использует только GDI +.

0 голосов
/ 30 апреля 2010

Прежде всего, вы используете структуру IntPtr и инициализируете ее нулем. Затем вы передаете этот дескриптор в класс Graphics. Если у вас нет окна с handle == 0, значение null - это именно то, что я ожидал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...