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

本文关键字:控件 创建 另一个 线程 我可以 | 更新日期: 2023-09-27 18:13:34

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

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

tl,博士不要

控件可以在不同的线程上创建,但是,当它们被添加到父线程(在不同的线程上创建)时,

很可能会引发跨线程异常。我不确定这个异常是否"保证",但是不要这样做。(有跨线程异常而不是隐式封送处理的原因;宁可死得快,也不要死得晚。

交叉线程和[winform]控件不能混合。当然,如果不同的表单在不同的线程中,并且每个表单的子线程与表单在同一个线程中,并且跨线程访问被保护或通过"invoke"或类似的方式使用……但是表单不是"子"控件。

幸福的编码。


示例跨线程异常消息:

系统。InvalidOperationException:跨线程操作无效:Control '…从创建它的线程以外的线程访问。

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

控件,没有。形式,是的。

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