C#我可以在另一个线程中创建控件吗?

时间:2011-11-04 06:33:12

标签: c# user-interface

通常在主线程上创建控件。 是否可以在另一个线程中创建一些子控件?

3 个答案:

答案 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();