Я думаю, что это то, что вы просите,
во-первых, у вас есть класс, который может создать элемент управления с параметрами
public class CreateControl
{
public Control Create(string name, Point location, Size size)
{
Panel p = new Panel();
p.Name = name;
p.Location = location;
p.Size = size;
p.BackColor = Color.Red;
return p;
}
}
, а затем в winform вы можете создавать элементы управления с помощью потока, а вы d, чтобы избежать исключения операции перекрестной резьбы, когда вы добавляете элемент управления в форму, используя метод вызова формы, предложенный Tinwor.
public partial class Form1 : Form
{
public delegate void AddToControl(Control control);
public AddToControl MyAddToControl;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread((ThreadStart)delegate
{
CreateControl c = new CreateControl();
Panel p = (Panel)c.Create("panel_1", new Point(10, 10), new Size(100, 100));
AddControlToControls(this, p);
});
t1.Start();
}
public void AddControlToControls(Control parent, Control control)
{
MyAddToControl = new AddToControl(this.AddControl);
parent.Invoke(this.MyAddToControl, control);
}
public void AddControl(Control control)
{
this.Controls.Add(control);
}
}
так по существу да можно это сделать. Я уверен, что код может быть улучшен, чтобы сделать его немного более кратким. Надеюсь это поможет.
если это wpf использовать диспетчер – wudzik
Вопрос, который вы должны задать, это: «Почему я это делаю?». –
Да, возможно, но почему вы хотите это сделать? В WinForms, если вы создаете элемент управления в одном потоке, вы не можете его добавить для управления, созданного в другом потоке (просто бесполезно) –