通常在主线程上创建控件。 是否可以在另一个线程中创建一些子控件?
答案 0 :(得分:7)
tl,博士不要这样做。
控件可以在不同的线程上创建,但是,当它们被添加到父级(在不同的线程上创建)时,然后可能会有 a提出了跨线程异常。我不确定这个例外是否“保证”,但不要这样做。 (由于某种原因,存在跨线程异常而不是隐式编组 ;最好比死锁更快死亡。)
交叉线程和[winform]控件不混合。当然,如果不同的表单位于不同的线程上,并且每个表单的子节点与表单位于同一个线程上,则跨线程访问通过“调用”或类似方式进行保护或使用......但表单不是“孩子“控制。
快乐的编码。
示例跨线程异常消息:
System.InvalidOperationException:跨线程操作无效:从创建它的线程以外的线程访问控件'...'。
答案 1 :(得分:3)
我不确定你为什么要这样做。我要做的是使用委托回调主线程上的方法并在那里添加控件。
答案 2 :(得分:0)
控制,没有。 Forms, yes.
Thread thread = new Thread( () =>
{
var yourForm = new YourForm();
Application.Run(yourForm);
});
thread.ApartmentState = ApartmentState.STA;
thread.Start();