在C#NET中关闭整个应用程序后如何结束进程?

在C#NET中关闭整个应用程序后如何结束进程?,c#,.net,visual-studio-2005,desktop-application,C#,.net,Visual Studio 2005,Desktop Application,我有一个.NET2005(C#)桌面应用程序,其中有一个登录表单和一个MDI表单,然后有多个子表单。所有其他表单仅以MDI表单打开 用户登录后,我会隐藏登录表单,然后显示MDI表单,但当我关闭MDI表单时,我的应用程序不会结束,因为登录表单仍然隐藏。我希望,当用户关闭MDI表单时,整个应用程序都应该关闭(本质上,流程不应该显示在任务管理器中),因为如果用户每次关闭并重新打开应用程序并登录,都会产生一些性能问题 我正在做的事情如下: //my login validation script, /

我有一个.NET2005(C#)桌面应用程序,其中有一个登录表单和一个MDI表单,然后有多个子表单。所有其他表单仅以MDI表单打开

用户登录后,我会隐藏登录表单,然后显示MDI表单,但当我关闭MDI表单时,我的应用程序不会结束,因为登录表单仍然隐藏。我希望,当用户关闭MDI表单时,整个应用程序都应该关闭(本质上,流程不应该显示在任务管理器中),因为如果用户每次关闭并重新打开应用程序并登录,都会产生一些性能问题

我正在做的事情如下:

//my login validation script,

//after successful login

this.Hide();

if (globalData.ObjMdiMain.IsDisposed)
{
    globalData.ObjMdiMain = new mdiMain();
}
globalData.ObjMdiMain.Show();
globalData
是我的静态类,我在其中创建整个应用程序所需的全局对象。在这里,我定义了MDI表单的
ObjMdiMain
对象,并在登录表单中访问它

那么,是否有任何方法或函数可以从系统结束整个过程,比如“Application.end();”或其他什么


谢谢

我觉得奇怪的是,在初次登录后,您将登录窗口隐藏起来。为什么不关上它?这样您就不会有当前的问题:成功登录后,您只有主MDI窗口,当该窗口关闭时,将退出正在运行的Windows窗体应用程序。你隐藏登录窗口而不是关闭它有什么原因吗?

我想你已经看过了?

有一个原因会发送windows消息关闭所有表单并退出消息循环。

我不想打断你,但是
Application.Exit()
是您需要的。如果你真的试过,你会找到的。不过,我必须同意peSHIr的观点,如果登录表单导致您出现问题,您为什么要保留它?

以下是关闭实际流程的方法,但这是关闭应用程序的糟糕方法:

Environment.Exit(Code) 
您可以将代码设置为0。或其他整数,这将告诉windows wath是应用程序执行的结果

我建议您先关闭登录表单,然后关闭应用程序,这是正确的方法


祝你好运;)

根据您的描述(如果我错了,请纠正我),我假设您将登录表单设置为启动表单,如下所示:

    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LoginForm());
    }
不要那样做。将其更改为类似以下内容:

    static void Main() {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        LoginForm frm = new LoginForm();
        if(frm.ShowDialog() == DialogResult.Cancel) {
            return;
        }

        Application.Run(new MdiForm());
    }
在登录表单代码中,根本不调用MDI表单,只需验证用户名和密码并允许登录表单退出即可。然后,
Main
方法将正确调用MDI表单


当您关闭MDI表单时,您的应用程序将自然退出。

这似乎是一个MySql.net连接器错误,因为我使用MySql.net连接器DLL连接到我的MySql数据库。我也看到了一些其他的抱怨。看见

我使用的是5.1版的MySQL.net连接器DLL,我刚刚升级到6.1(最新版本),工作正常,没有任何错误

在此处下载最新的DLL:


谢谢

,因为
登录
是应用程序的主要形式,当我关闭此应用程序时,它将结束整个应用程序。我同意Christian Hayter的观点:不要使用默认项目结构,只运行默认形式,而是编写自己的启动代码。另请参阅,以获取考虑顶级致命异常处理的示例。在我的示例中,您的登录GUI逻辑将取代
//在这里您需要/想要的任何东西。
。但实际上并没有这样做,它会导致一些未经处理的异常。所以它会导致什么异常?它会导致此异常:代码中的其他地方存在线程安全问题。找到问题的根源。分析引发异常的信号量并检查您的代码以发现问题。是的,您是正确的我将登录表单作为启动表单,让我试用您的代码。Hi@Christian,我已经测试了您的代码,但当我使用
this.Close()关闭登录表单时,我收到了此错误
成功登录检查后。我正在使用Windows7和VS2005。对不起,Prashant,我无法访问该URL。什么是错误消息文本?克里斯蒂安:无论如何,图像url工作正常;我收到“System.Threading.SemaphoreLexception was unhandled”异常消息“将给定计数添加到信号量将导致其超过最大计数。”