【问题标题】:C#/.NET: how do I close the application from a parent window?C#/.NET:如何从父窗口关闭应用程序?
【发布时间】:2009-11-05 14:05:33
【问题描述】:

我有一个包含 2 个表单的 Windows 应用程序。从一个表格我打开第二个表格。 打开第二个表格时,我隐藏了一个表格,而在第二个敌人中,我开始了一个线程。 现在我想关闭应用程序。 但我做不到。

在我尝试过的第一种形式中:

Form1 frm = new Form1(this, tcpClient);
frm.ShowDialog();
this.Close();
Application.Exit();

但申请并未结束。它仍在运行。

知道如何阻止它吗?

编辑(包括代码):

在第一个表单的按钮点击事件中:

this.Hide();
Form1 frm = new Form1(this, tcpClient, serverMsg);
frm.Show();

在第一个表单的按钮 FormClosed 事件中:

MessageBox.Show("Before");
Application.Exit();

在第二个表单的加载事件中,我正在调用一个方法 startThread();关于这个方法

ilThread = new Thread(incomingListener);
ilThread.IsBackground = true;
ilThread.Start();

【问题讨论】:

  • 可能值得发布用于启动线程的代码。
  • 你是如何关闭第二个表格的?
  • 调用 Application.Exit() 时遇到什么错误?那行代码甚至被调用了吗?
  • 谢谢大家的努力,其实我已经打开了socket,而且还没有关闭,所以在我关闭那个socket之后Application.Exit();开始工作。

标签: c# .net winforms


【解决方案1】:

当您执行frm.ShowDialog() 时,您将打开一个模式窗口。代码将在该点停止,直到您在 frm 上指定 DialogResult。 IE。 frm.DialogResult = DialogResult.Ok;.

如果您使用frm.Show(),那可能对您有用。

【讨论】:

  • +1。好眼力。如果@openidsujoy 解决了这个问题,那么下一个可能是线程(根据我的回答)!
  • 干杯。如果他进一步发布任何内容,我一定会返回 +1。
  • 如果我使用“frm.Show()”然后它会立即关闭整个应用程序。
  • 我想在第二个表单的关闭事件中关闭应用程序。
  • 您需要向我们展示更多代码,即关闭事件发生了什么,设置线程时发生了什么。帮助我们帮助您!
【解决方案2】:

编辑- 首先查看@GenericTypeTea 的答案。如果这样做后您仍然遇到问题,请参阅我的:

从你的描述听起来你已经让线程运行了。您是否尝试过将线程创建为 background thread 或确保以干净的方式结束该线程?

【讨论】:

    【解决方案3】:

    您可能没有将启动的线程设置为后台线程。当应用程序关闭时,后台线程会自动停止。前台线程将使其保持活动状态。

    要将线程设置为后台线程,请使用IsBackground 属性。

    Thread.IsBackground

    否则,您应该注意在退出应用程序之前停止已启动的线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多