C#/ .NET:如何从父窗口关闭应用程序?

时间:2009-11-05 14:05:34

标签: c# .net winforms

我的Windows应用程序有2个表单。从一种形式我打开第二种形式。 打开第二个表单时,我隐藏了1个表单,而在第二个表单中,我正在启动一个帖子。 现在我要关闭应用程序。 但我无法做到这一点。

在我的第一张表格上,我尝试过:

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();

3 个答案:

答案 0 :(得分:3)

当你执行frm.ShowDialog()时,你正在打开一个模态窗口。代码将在此时停止,直到您在frm上指定DialogResult。即frm.DialogResult = DialogResult.Ok;

如果您使用可能适合您的frm.Show()

答案 1 :(得分:1)

编辑 - 请先查看@ GenericTypeTea的答案。如果这样做之后你还有问题,请看我的:

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

答案 2 :(得分:0)

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

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

请参阅Thread.IsBackground

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