2009-12-02 6 views
0

Я создал приложение с окнами .net 2.0. Это приложение создает элементы управления форматом динамически. Теперь, когда я пытаюсь запустить приложение, он бросает исключение «Ошибка при создании дескриптора Windows». После этого приложение зависает, и ничего не происходит. В первый раз форма отображается правильно. На конкретном событии я пытаюсь перезагрузить ту же форму, в то время как я получаю это исключение. Кто-нибудь знает, как избавиться от этого. Любая помощь была бы полной:Ошибка при создании дескриптора окон

+0

Опубликуйте свой код. 'На конкретном событии я пытаюсь перезагрузить ту же форму, в то время как я получаю это исключение. 'Похоже, вы делаете что-то не так в обработчике событий. –

ответ

0

Я недавно опубликовал такую ​​же проблему.

Существует ограничение на процесс всего в 10 000 ручек - легко достичь, если вы динамически создаете сложный интерфейс.

Чтобы проверить, подходит ли это для вас, воспользуйтесь диспетчером задач - перейдите на вкладку «Процессы», включите столбцы «USER Objects» и «GDI Objects». Затем воспроизведите проблему.

В моем случае значение объекта USER Object достигло ровно 10 000, а затем «бум».

Если это то, что происходит для вас, вам нужно убедиться, что старые элементы управления расположены правильно, прежде чем создавать новую форму. Возможно, вам придется перепроектировать, чтобы использовать меньше ручек - это то, что мне нужно было сделать.

+0

Hi Bevan, Спасибо за ответ. Я проверил свой код и, как вы сказали, все элементы управления не были правильно настроены. Я выбрасывал исключение для SplitterControl, который я использую в своей форме. И, следовательно, он нарушал поток. Теперь, что я делаю, я просто собираю все элементы управления в объект коллекции и удаляю каждого из них принудительно. Это работает отлично, но поскольку форма находится через свой метод dispose(), я не уверен, что это оптимальный способ удаления элементов управления. –

+0

Вам необходимо убедиться, что вы не удаляете средства управления дважды; Я бы предложил использовать Reflector для проверки кода для 'Control', чтобы увидеть, предотвращает ли его метод' Dispose() ', удалив элемент управления из формы. – Bevan

Смежные вопросы