【问题标题】:c# windows form appc# windows窗体应用程序
【发布时间】:2011-03-18 08:48:10
【问题描述】:

我在 C# 程序中创建了 2 个 Windows 窗体应用程序。我这样做了:

Application.Run(new Form1());
Application.Run(new Form2());

第二个表单没有加载。为什么?我该如何解决这个问题?我想同时激活这两种形式。每个表单应用程序都加载不同的方法。我想以某种方式为这些表单中的每一个创建一个并行过程。

解决方法和问题: 我为 2 种形式创建了 2 个线程。此表单称为父表单。问题是父表单有一个向量,我想在其中不断添加表单中的元素。我注意到每次重新激活线程时都会重新初始化向量。这东西怎么改?

【问题讨论】:

    标签: c#


    【解决方案1】:

    Application.Run 用于启动您的应用程序并指示应在应用程序启动时加载哪个窗口(即哪个窗口应该是主窗口)。要显示第二个表单,您需要手动创建并显示它,而不是使用 Application.Run

    var form = new Form2();
    form.Show();
    

    此代码可以放在 Form1 的构造函数中或响应某些事件。它可能不会在您调用Application.Run 的同一方法中创建,因为此方法不会进一步运行,直到您关闭 Form1 窗口。可能 Forms1 的构造函数是执行此操作的最佳位置。

    【讨论】:

    【解决方案2】:

    因为 Application.Run 被阻塞。它在当前线程上运行应用程序。您必须使用其中一个 Application.Run 命令启动 2 个单独的线程。

    最好的做法是在单独的线程中打开两者之一。

    【讨论】:

    • 我为 2 个表单创建了 2 个线程。此表单称为父表单。问题是 paretn 表单有一个向量,我想在其中不断添加表单中的元素。我注意到每次重新激活线程时都会重新初始化向量。这个东西怎么改?
    • 对不起,我对线程间通信没有太多经验。
    【解决方案3】:
    Application.Run(new Form1());
    

    这将调用 Form1 并等待该表单关闭。之后将调用第二个 Run 方法。

    Application.Run 是同步方法,

    【讨论】:

      【解决方案4】:

      adrianbanks' answer here:

      启动 WinForms 应用程序的推荐方法是使用 Application.Run,​​但我怀疑这更像是一种约定而不是规则。使用 Application.Run 的最大原因是如果您想打开多个非模态表单。你可以这样做:

      new Form().Show();
      new Form().Show();
      Application.Run();
      

      【讨论】:

      • 你忘了说,在这种情况下,如果所有表格都关闭,申请过程不会终止,但它真的很有用
      【解决方案5】:

      我真的不明白你想要完成什么,但关闭第一个表单,第二个会显示 :-)

      您没有看到第二个,因为 Run 方法直到您关闭工作对象(这是 Forms1)才返回控制权

      【讨论】: