我已经在c#中创建了一个程序,它显示了2种形式1从用户获取值并将其保存在数据库中,其次是在水晶报告模板中显示这些值。
我的问题是当我将第一个表单移动到第二个表单时,我使用hide()隐藏第一个表单;函数和从数据库获取第二个表单上的值后我移回到第一个表单并隐藏第二个表单并显示第一个但是当我关闭整个程序时它继续运行并且调试器显示其运行并且还在任务管理器中有一个进程。
我想知道如何在form1关闭的情况下关闭该后台进程。抱歉我的英语不好。
rollno = txtrollno.Text;
ReportCard objreport = new ReportCard();
objreport.Show();
this.Hide();
这是隐藏第一张表格的代码。
Form1 objshow = new Form1();
objshow.Show();
this.Hide();
并在此我隐藏第二并再次显示第一。
答案 0 :(得分:10)
尝试使用
Close();
当表单关闭时,将关闭对象中创建的所有资源并处理表单。您可以通过处理Closing事件并将作为参数传递的CancelEventArgs的Cancel属性设置为事件处理程序来阻止在运行时关闭表单。如果您要关闭的表单是应用程序的启动表单,则应用程序结束。
或
Application.Exit();
此方法停止所有线程上的所有正在运行的消息循环,并关闭应用程序的所有窗口。此方法不会强制应用程序退出。 Exit方法通常在消息循环中调用,并强制Run返回。要仅退出当前线程的消息循环,请调用ExitThread。
或
Environment.Exit(exitCode)
终止此过程并为底层操作系统提供指定的退出代码。此调用要求您具有SecurityPermissionFlag.UnmanagedCode权限。如果不这样做,则会发生SecurityException错误。如果您正在运行控制台应用程序,则这是要使用的调用。
答案 1 :(得分:1)
因此,为了让您的程序结束(优雅地),您需要关闭主窗体。既然您希望整个程序结束之前您已完成该表单,那么您当前只是隐藏它(这很好)而不是关闭它。您需要做的是确保在关闭第二个表单时关闭主表单。这很容易与事件有关:
Form1 objshow = new Form1();
objshow.Show();
this.Hide();
//Add this next line when you show the second form.
objshow.FormClosed += (_, args) => this.Close();