日期:2014-05-17  浏览次数:21070 次

C#中关于退出整个应用程序的问题!
我有两个窗体,假设为form1,form2.form1先启动,然后在new form2.我在form2点击关闭时退出整个应用程序遇到了问题。在FormClosing中我写了个询问的操作,具体代码如下:
   
private void KKMainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("你确定要退出吗?", "系统提示", MessageBoxButtons.OKCancel,                      MessageBoxIcon.Question) == DialogResult.OK)
            {
                MessageBox.Show("谢谢使用康康聊天工具!");
                Application.Exit();
            }
        }

当用户点击确定后,后执行Application.Exit。而Application.Exit又会自动调用Form_Closing方法,则又会询问用户是否要退出,显然这是不行的。我想请问一下有什么办法让Application.Exit不再调用FormClosing而是直接退出整个程序,或者其他办法也行。谢谢。

参考MSDN如下:
备注Exit 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。 该方法并不强制退出该应用程序。Exit 方法通常从一个消息循环内调用,该方法强制 Run 返回。 若要只退出当前线程的某个消息循环,请调用 ExitThread。 

Exit 引发下列事件并执行关联的条件操作: 

为 OpenForms 属性表示的各个窗体引发 FormClosing 事件。 可以通过将这些窗体的 FormClosingEventArgs 参数的 Cancel 属性设置为 true,取消此事件。 

如果多个处理程序的其中之一取消该事件,则 Exit 将返回而无进一步操作。 否则,将为每个打开的窗体引发 FormClosed 事件,然后关闭所有正在运行的消息循环和窗体。

------解决方案--------------------

        void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.ApplicationExitCall)
                return;
            if (MessageBox.Show("你确定要退出吗?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                MessageBox.Show("谢谢使用康康聊天工具!");
                Application.Exit(new CancelEventArgs(true));
            }
        }