关闭时代码如下        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (trueclose == false)
            {
                e.Cancel = true;
                this.Hide();
            }
            else
            {
                Application.Exit();
            }
        }trueclose是关闭标志,为true时才关闭程序。这样写会导致关不了机?大家帮帮。谢谢了。

解决方案 »

  1.   

      private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                if(e.CloseReason==CloseReason.UserClosing)
                {
                    e.Cancel = true;
                    this.Hide();
                }
                else
                {
                    Application.Exit();
                }
            } 判断参数e.CloseReason
      

  2.   

    关机时,系统给你的程序发送一个关机消息,你的程序调用FormClosing事件委托函数,而此时你的isExitApp不为true,因而只是隐藏,不退出。
    应该截获关机消息处理之。
    改为:
    private bool isExitApp = false;
            private const int WM_QUERYENDSESSION = 0x0011;
            protected override void WndProc(ref   Message m)
            {
                switch (m.Msg)
                {
                    case WM_QUERYENDSESSION:
                        isExitApp = true;
                        break;
                    default:
                        base.WndProc(ref   m);
                        break;
                }        }
            private void Form7_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (!this.isExitApp)
                {
                    e.Cancel = true;
                    this.WindowState = FormWindowState.Minimized;
                    this.Hide();
                }         } 
      

  3.   

    Application.Exit()通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。
    换Environment.Exit(0)试试
      

  4.   

    系统通知程序关闭时,你的程序并不能关闭!所以系统一直等待你的程序关闭。
    if(e.CloseReason==CloseReason.WindowsShutDown)
    {
    //系统要关闭!
    }
      

  5.   

    谢谢大家了。zgke的意思是这样写是吧。if (trueclose == false && e.CloseReason == CloseReason.UserClosing)
      

  6.   

    trueclose == false 要不要 看你的实际需要了
      

  7.   

    Environment.Exit因为你屏蔽了关闭动作!没有将关闭动作继续下去。 所以你只剩自裁了。
      

  8.   

    MARK   对我有用!!
      

  9.   

    trueclose == false,,要是没有作为其他地方的判断标志的话,就完全可以去掉
      

  10.   

    把Application.Exit(); 改为 Application.ExitThread();就可以啦……
      

  11.   

    protected override void WndProc(Message m)
    {
         if(m.Msg == 0x11)
        {
             // osShutDown是一个在程序一开始定义的一个bool型的变量,用来标记是否截获的是关机消息
             osShutDown =  true;   
        }
        base.WndProc();
    }private void Form1_Closing(object sender, CancelEventArgs e)
    {
        if( !osShutDown )
        {
              e.Cancel = true;
              this.Hide();
        }
    }
      

  12.   

    trueclose == false 是为了处理用户真的要退出的情况。所以应该是要加的吧。