【问题标题】:Form keeps loading表单不断加载
【发布时间】:2014-08-23 20:54:12
【问题描述】:

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

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

我没有收到任何错误或异常

【问题讨论】:

  • 显示打开表单的代码。此外,确认确实收到了命令并且调用了该代码。我认为您还需要编辑标题。
  • 我已经调试过了。正在接收命令,因为在发送命令时表单正在打开。问题是窗体上没有控件出现并且窗体冻结。标题需要改成什么?

标签: c# forms tcp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    好像你想从非 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();
    

    【讨论】:

    • 它起初工作,但现在我遇到了问题。我一直在谷歌搜索,我发现它不应该用于打开表单。 Source
    【解决方案3】:

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

     this.Invoke((MethodInvoker)delegate () { new Form() {
     //Your code here
     }).Show(); });
    

    【讨论】:

      猜你喜欢
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多