应用程序取消关闭

时间:2012-01-23 09:55:10

标签: c# .net c#-4.0

我遇到了一个似乎取消关闭或重新启动计算机的应用程序的问题。 我认为这是因为我捕获了表格结束事件并取消了它:

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    if (!AllowApplicationClose)
    {
        e.Cancel = true;
        this.WindowState = FormWindowState.Minimized;
    }
}

我这样做,以便关闭按钮最小化到任务栏。我确实希望能够在不退出应用程序的情况下重新启动。有一个更好的方法吗?或者一种了解Windows是否正在关闭应用程序的方法?

编辑:谢谢你的回答。对不起,我只能选择一个正确的,我只是选择了一个。再次感谢!

4 个答案:

答案 0 :(得分:2)

先检查e.CloseReason;仅在用户启动时取消:CloseReason.UserClosing

请点击此处查看您可以使用的其他值:CloseReason (MSDN)

答案 1 :(得分:2)

您可以使用CloseReason来检测用户是否正在关闭表单,或者更好(在您的情况下)使用SystemEvents - 类来在系统尝试注销时获取事件或者关机/重启,这样你也可以在应用程序最小化时关闭它。

答案 2 :(得分:1)

检查事件参数的CloseReason,如果它是WindowsShutDownTaskManagerClosing则不执行任何操作。

答案 3 :(得分:0)

使用线程计时器程序,然后使用以下程序分别关闭Windows进程。

public void Computer_Shutdown()
        {
            if (this.checkBox.Checked)
            {
                System.Diagnostics.Process[] processes = 
                   System.Diagnostics.Process.GetProcesses();

                foreach (System.Diagnostics.Process 
                           processParent in processes)
                {
                    System.Diagnostics.Process[] processNames = 
                                 System.Diagnostics.Process.
                                 GetProcessesByName
                                 (processParent.ProcessName);

                    foreach (System.Diagnostics.Process 
                            processChild in processNames)
                    {
                        try
                        {
                            System.IntPtr hWnd = 
                                   processChild.MainWindowHandle;

                            if (IsIconic(hWnd))
                            {
                                ShowWindowAsync(hWnd, SW_RESTORE);
                            }

                            SetForegroundWindow(hWnd);

                            if (!(processChild.
                               MainWindowTitle.Equals(this.Text)))
                            {
                                processChild.CloseMainWindow();
                                processChild.Kill();
                                processChild.WaitForExit();
                            }
                        }
                        catch (System.Exception exception)
                        {

                        }
                    }
                }
            }