3

我在 C# 中制作了一个程序,它显示了 2 种类型的表单 1 是从用户那里获取值并将其保存在数据库中,第二个是在水晶报表模板中显示这些值。

我的问题是当我将第一种形式移动到第二种形式时,我使用 hide() 隐藏第一种形式;函数,在从数据库中获取第二个表单的值后,我回到第一个表单并隐藏第二个表单并显示第一个,但是当我关闭整个程序时,它继续运行,调试器显示它并运行,并且在任务管理器中有一个进程。

我想知道如何使用 form1 关闭该后台进程。对不起,我的英语不好。

      rollno = txtrollno.Text;
                    ReportCard objreport = new ReportCard();
                    objreport.Show();
                    this.Hide();

这是隐藏第一种形式的代码。

 Form1 objshow = new Form1();
        objshow.Show();
        this.Hide();

在此我隐藏第二并再次显示第一。

4

2 回答 2

12

尝试使用

Close();

当窗体关闭时,对象内创建的所有资源都将关闭并释放窗体。您可以通过处理 Closing 事件并设置作为参数传递给事件处理程序的 CancelEventArgs 的 Cancel 属性来防止在运行时关闭窗体。如果您要关闭的表单是应用程序的启动表单,则您的应用程序将结束。

或者

Application.Exit();

此方法停止所有线程上所有正在运行的消息循环并关闭应用程序的所有窗口。此方法不会强制应用程序退出。Exit 方法通常在消息循环中调用,并强制 Run 返回。要仅退出当前线程的消息循环,请调用 ExitThread 。

或者

Environment.Exit(exitCode)

终止此进程并为底层操作系统提供指定的退出代码。此调用要求您具有 SecurityPermissionFlag.UnmanagedCode 权限。如果不这样做,则会发生 SecurityException 错误。如果您正在运行控制台应用程序,这是要使用的调用。

于 2012-10-10T14:02:44.803 回答
1

因此,为了让您的程序(优雅地)结束,您需要关闭主窗体。由于您在希望整个程序结束之前已经“完成”了该表单,因此您目前只是隐藏它(这很好)而不是关闭它。您需要做的是确保在关闭第二个表单时关闭您的主表单。这很容易处理事件:

Form1 objshow = new Form1();
objshow.Show();
this.Hide();
//Add this next line when you show the second form.
objshow.FormClosed += (_, args) => this.Close();
于 2012-10-10T14:13:31.870 回答