2010-11-15 5 views
2

Я хочу создать кнопку (сделанную мной как пользовательский контроль) из другого потока, отличного от того, который я хочу создать. Дело в том, что я знаю, как изменить объект управления пользователем из другого потока (используя делегат и .InvokeRequired), но я не знаю, как я мог его создать. Какие-либо предложения ?Создайте пользовательский контроль из другого потока

ответ

4

Попробуйте следующее:

// From the other thread 

userControl11.BeginInvoke(new Action(() => 
{ 
    var button = new Button(); 

    button.Text = "My new button"; 

    userControl11.Controls.Add(button); 
})); 

В рамках делегата (() => { }), вы можете сделать все, что угодно с контролем пользователя и формы.

+0

В моих Winforms я включил функцию, которую я вызываю из потока .. в нее я включил следующий код: panel6.BeginInvoke (new Action (() => { controlAtentionare ca = new controlAtentionare (данные, severitate, locatie, alarma, descriere, true); ca.Location = new Point (0, this.Controls.Count * ca.Height); this.panel6.Controls.Add (ca); MessageBox. Show («LALA»); })); – Alex

+0

Появляется предупреждение «lala», но мой элемент управления не добавлен – Alex

+0

Genius! Удивительное решение на месте. В некоторых случаях я ненавижу создание дополнительных методов для вызова, даже если это небольшой процесс. Большое спасибо, узнал что-то новое :). – C4u

2

Используйте точно так же, как для изменения пользовательского элемента управления. Функция, которая создает элемент управления, должна выполняться в потоке пользовательского интерфейса и вызываться с использованием Invoke или BeginInvoke. Передайте всю информацию, необходимую для создания контроля, используя параметры делегата.

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