Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/.NET:如何从父窗口关闭应用程序?_C#_.net_Winforms - Fatal编程技术网

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

C#/.NET:如何从父窗口关闭应用程序?,c#,.net,winforms,C#,.net,Winforms,我有一个Windows应用程序,它有2个表单。从一张表格开始,我打开了第二张表格。 当打开第二个窗体时,我隐藏了一个窗体,在第二个窗体中,我启动了一个线程。 现在我想关闭应用程序。 但我没能做到 在我的第一个表格中,我尝试了: Form1 frm = new Form1(this, tcpClient); frm.ShowDialog(); this.Close(); Application.Exit(); 但申请并没有结束。它还在运行 你知道怎么阻止吗 编辑(包括代码): 在第一个表单的按钮

我有一个Windows应用程序,它有2个表单。从一张表格开始,我打开了第二张表格。 当打开第二个窗体时,我隐藏了一个窗体,在第二个窗体中,我启动了一个线程。 现在我想关闭应用程序。 但我没能做到

在我的第一个表格中,我尝试了:

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

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


从您描述的内容来看,听起来好像您让线程一直在运行。您是否尝试过将该线程创建为一个线程,或者确保以干净的方式结束该线程?

编辑-请先参阅@GenericTypeTea的答案。如果这样做后,您仍然有问题,请参见我的:


从您描述的内容来看,听起来好像您让线程一直在运行。您是否尝试过将线程创建为背景线程,或者确保以干净的方式结束该线程?

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

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


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

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

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


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

当您打开一个模式窗口时。代码将在该点停止,直到您在frm上指定一个
对话框result
。即
frm.DialogResult=DialogResult.Ok


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

当您使用
frm.ShowDialog()
时,您正在打开一个模式窗口。代码将在该点停止,直到您在frm上指定一个
对话框result
。即
frm.DialogResult=DialogResult.Ok


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

可能值得发布用于启动线程的代码。您如何关闭第二个表单?调用Application.Exit()时会出现哪些错误?这行代码被调用了吗?谢谢大家的努力,事实上我已经打开了套接字,但它并没有关闭,所以在我关闭套接字应用程序之后。Exit();开始工作。可能值得发布用于启动线程的代码。如何关闭第二个表单?调用Application.Exit()时会出现哪些错误?这行代码被调用了吗?谢谢大家的努力,事实上我已经打开了套接字,但它并没有关闭,所以在我关闭套接字应用程序之后。Exit();开始工作。好的。如果@openidsujoy解决了这个问题,那么下一个问题可能是线程问题(根据我的回答)!干杯如果他进一步发布任何内容,我一定会返回+1。如果我使用“frm.Show()”,它会立即关闭整个应用程序。我想在第二个表单的关闭事件中关闭应用程序。您需要向我们显示更多代码,即关闭事件中发生的情况,以及设置线程时发生的情况。帮助我们,帮助你+1.好的。如果@openidsujoy解决了这个问题,那么下一个问题可能是线程问题(根据我的回答)!干杯如果他进一步发布任何内容,我一定会返回+1。如果我使用“frm.Show()”,它会立即关闭整个应用程序。我想在第二个表单的关闭事件中关闭应用程序。您需要向我们显示更多代码,即关闭事件中发生的情况,以及设置线程时发生的情况。帮助我们,帮助你!