Добавление пользовательского элемента управления winform 1000 раз в форму вызывает исключение {"error creating window handle."}, как его устранить?
1. Winform пользовательский элемент управления имеет две панели, Б. закрепленной налево, Б размещена для заполнения.
2. панель а имеет две кнопки (без событий), панель Б имеет две метки и два текстовых поля (без событий).
3. Добавление пользовательского элемента управления в форму с использованием заданных строк, эта форма не имеет никакого другого элемента управления.
public partial class Form1 : Form { private UserControl1 userControl; public Form1() { InitializeComponent(); for (int i = 0; i <1000; i++) { userControl = new UserControl1(); userControl.Dock = DockStyle.Top; Controls.Add(userControl); } } }
4. приведенная ниже ошибка возникает в строке
Application.Run(new Form1());, любое решение для добавления большого количества пользовательских элементов управления в форму?
System.ComponentModel.Win32Exception HResult=0x80004005 Message=Error creating window handle. Source=System.Windows.Forms StackTrace: at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp) at System.Windows.Forms.Control.CreateHandle() at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl() at System.Windows.Forms.Control.WmShowWindow(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ScrollableControl.WndProc(Message& m) at System.Windows.Forms.Form.WmShowWindow(Message& m) at System.Windows.Forms.Form.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Что я уже пробовал:
ищете решение для решения этой проблемы?
MadMyche
Зачем вам нужно так много элементов управления?
Member 11989746
Я просто хочу этого, я не вижу причины, почему я не могу этого иметь. Есть ли у вас какие-либо мысли, чтобы достичь этого? независимо от того, насколько несовершенен дизайн...
Richard MacCutchan
У вас закончились системные ресурсы. Нет никакой веской причины добавлять в форму такое количество элементов управления; вам нужно переосмыслить свой дизайн.
Member 11989746
Память процесса остается на уровне 37 МБ, CUP использует менее 10<.
Я не эксперт, но я запустил GB размер игр на этом ПК, почему это маленькое приложение плачет?
Richard MacCutchan
Скорее всего, у вас закончились дескрипторы Windows. Хватит тратить на это время.
Dave Kreskowiak
Рам не имеет к этому никакого отношения. Пул дескрипторов в Windows не безграничен, и вы запустили пул всухую.
Вы действительно не можете, ни в коем случае, добавить более тысячи элементов управления в форму.
Пул дескрипторов использует не только ваше приложение. Это каждое приложение, окно, файл, объект GDI, устройство,..., ...,... Все системы в Windows.
В случае вашего приложения основная форма имеет дескриптор, заголовок имеет дескриптор, кнопки на нем (свернуть, развернуть, закрыть) все имеют дескрипторы.
Ваш пользовательский элемент управления использует минимум 10 ручек, за каждый экземпляр, который вы создаете. Поздравления. Вы только что попытались выделить более 10 000 дескрипторов в своем приложении и удивляетесь, почему оно просто взорвалось?
Если вы исчерпаете пул дескрипторов, Windows станет очень нестабильной и даже рухнет на вас.
Gerry Schmitz
Задавайте глупые вопросы, ожидайте глупых ответов.
Глупая трата времени каждого.
0x01AA
Хорошее наблюдение! И нет, я не считаю этот вопрос глупым. Знать пределы системы (или, по крайней мере, чувствовать ее) - очень хорошая идея.
И для всех, кто считает этот вопрос глупым: каков предел контроля, который можно добавить без проблем? Аааа, это зависит от ситуации к ситуации... и какие приложения работают... :-)