2011-11-04 108 views

回答

6

tl,dr 不要做

该控件可以在不同的线程被创建,但是,当它们被添加到父(在不同的线程创建的),然后很可能存在提出了一个跨线程异常。我不确定这个例外是否“保证”,但不这样做。 (有跨线程异常,而不是隐式编组,原因是;以后比死锁更好死。)

跨线程和[winform]控件不混合。当然,如果不同的表单在不同的线程上,并且每个表单的子表单与表单在同一个线程中,并且跨线程访问通过“调用”或类似方式被保护或使用,但表单不是“孩子“控制。

快乐编码。


样品跨线程异常消息:

System.InvalidOperationException:跨线程操作无效:从不是创建它的线程以外的线程访问控制“...”。

3

我不确定你为什么要这样做。我会做的是使用委托回调主线程上的方法,并在那里添加控件。

0

Controls,no。 Forms, yes.

Thread thread = new Thread(() => 
    { 
     var yourForm = new YourForm(); 
     Application.Run(yourForm); 
    }); 
thread.ApartmentState = ApartmentState.STA; 
thread.Start(); 
相关问题