странное исключение, которое появляется время от времени, не может воспроизвести шаги в WinForms UI - PullRequest
0 голосов
/ 16 октября 2010
Exception type: System.ComponentModel.Win32Exception
Exception message: Error creating window handle.

Я не мог воспроизвести его в среде разработки, хотя время от времени он появляется у конечного пользователя. Я знаю, что это может быть слишком общим и расплывчатым, но если вы столкнулись с таким исключением, каковы были потенциальные причины?

Ответы [ 4 ]

1 голос
/ 17 октября 2010

Есть несколько возможностей для этого исключения.Но если он прерывистый, то на самом деле есть только один.В вашем коде течет дескриптор окна.Программа может выделить до 10 000 из них до того, как Windows отключит плагин и откажется разрешить ее создание.

Трудно воспроизвести, поскольку подобные утечки занимают некоторое время, чтобы нарастить квоту.Но легко заметить из Taskmgr.exe.Перейдите на вкладку «Процессы», просмотрите + выберите столбцы и отметьте «Объекты пользователя».Соблюдайте этот номер во время запуска вашей программы.Он будет увеличиваться на единицу каждый раз, когда ваше приложение создает новую форму или элемент управления.И должен закрываться при закрытии формы.

К сожалению, довольно легко сделать ошибку, которая вызывает такую ​​утечку.Это происходит, когда вы удаляете элемент управления из формы без вызова его метода Dispose ().Или вызов Controls.Clear () без предварительной утилизации элементов управления.Элементы управления, которые удаляются таким образом, временно размещаются в «окне парковки».С намерением, что он проживет достаточно долго, чтобы позволить вам переместить их в другой контейнер.Если этого не произойдет, то дескриптор окна для элемента управления будет постоянно утек.

0 голосов
/ 16 октября 2010

Возможно, приложение имеет много форм, которые открываются пользователем, но не обязательно закрываются и удаляются должным образом. Подобные вещи довольно сложно воспроизвести, потому что разработчики и специалисты по обеспечению качества обычно никогда не используют приложение как конечный пользователь.

0 голосов
/ 16 октября 2010

Из того, что я вижу, это исключение, когда ваш диалог обработки ошибок пытается отображаться.

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