Элементы управления, созданные в одном потоке, не могут быть родительскими для элемента управления в другом потоке - C#

Узнай цену своей работы

Формулировка задачи:

Привет Есть задача - нужно динамически добавлять компоненты. Все работает хорошо. Но если добавлять через цикл то начинает зависать форма и элементы не прорисовываются. Вот что получается пока компоненты добавляются. http://www.cyberforum.ru/attachment....1&d=1376561587 После добавления всех компонентов получится так. http://www.cyberforum.ru/attachment....1&d=1376561783

Как можно организовать правильное добавление компонентов без всяких зависаний формы и глюков прорисовки ?

Может как то асинхронно или в отдельном потоке. Нужна помощь, поиск в инете не помог разобраться. Заранее Спасибо Вот код как добавляю компонент.
        ClassLibrary1.K_v1 tb;
        public void Add(Image Imegs, string Text1, string Text2, string Text3, string Text4)
        {
            tb = new ClassLibrary1.K_v1();
            tb.Dock = DockStyle.Top;
            tb.ForeColor = this.ForeColor;
            tb.Text1to4(Imegs, Text1, Text2, Text3, Text4);
            this.Controls.Add(tb);
            tb.Click += new EventHandler(this.button1_Click);
        }

Решение задачи: «Элементы управления, созданные в одном потоке, не могут быть родительскими для элемента управления в другом потоке»

textual
Листинг программы
                this.Invoke(new MethodInvoker(() => {
                    Button tb = new Button();
                    tb.Location = new Point(0, i * 30);
                    tb.ForeColor = this.ForeColor;
                    tb.Text = (i + 1).ToString();
                    this.Controls.Add(tb);
                }));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы