C# 表单不断加载

C# 表单不断加载,c#,forms,tcp,C#,Forms,Tcp,当通过TCP连接接收命令时,我试图打开一个新表单。发生这种情况时,表单不会加载。当我在按钮单击事件中输入完全相同的代码来打开表单时,表单加载成功 TCP侦听器正在与按钮打开时不同的线程中侦听 我没有发现任何错误或异常将要执行的业务逻辑放在一个单独的方法中(例如..OpenForm())。 尝试将上下文切换回UI线程,然后才调用OpenForm()。似乎要从非UI线程创建表单,如 new Thread(() => { new Form() { Text = "In non-ui thread

当通过
TCP
连接接收命令时,我试图打开一个新表单。发生这种情况时,表单不会加载。当我在按钮单击事件中输入完全相同的代码来打开表单时,表单加载成功

TCP
侦听器正在与按钮打开时不同的线程中侦听


我没有发现任何错误或异常

将要执行的业务逻辑放在一个单独的方法中(例如..OpenForm())。
尝试将上下文切换回UI线程,然后才调用OpenForm()。

似乎要从非UI线程创建表单,如

new Thread(() => { new Form() { Text = "In non-ui thread" }.Show(); }).Start();
这行不通。但这可以通过一个小技巧来实现

var t = new Thread(() => { Application.Run(new Form() { Text = "In non-ui thread" }); }); 
t.ApartmentState = ApartmentState.STA;
t.Start();

实际上,您可能正在尝试打开新的表单线程,而不是UI线程。在这种情况下,您可以尝试&:


显示打开表单的代码。另外,确认确实收到了该命令,并且调用了该代码。我想你也需要编辑标题。我已经调试过了。正在接收命令,因为发送命令时表单正在打开。问题是窗体上没有控件出现,窗体冻结。标题需要改成什么?SourceIt一开始是有效的,但现在我遇到了问题。我一直在谷歌上搜索,我发现它不应该用于打开表单。
 this.Invoke((MethodInvoker)delegate () { new Form() {
 //Your code here
 }).Show(); });