Force application close on system shutdown

北城以北 提交于 2020-01-10 11:46:14

问题


I have a Windows Forms application that when the Main Window is closing, it displays a basic dialog box, confirming the action. If the user decides to cancel the application exit is cancelled.

However, when the application is running minimized and the user wants to shut down the PC, the shutdown sequence stops because my application is waiting on the user to confirm the application close (the dialog box is displayed).

I thought of adding a timer for making a timeout and if no answer comes in a certain amount of time, close the application automatically, but even if this is a way to do it, it's certainly NOT how every other app does it.

So what would there be an optimal solution to confirm the application shutdown in every other case, unless the system is shutting down?

Thank you!


回答1:


In your FormClosing event check the FormClosingEventArgs' CloseReason property to see why the window is closing down. If it is CloseReason.WindowsShutDown then don't show your dialog and do not cancel the closing of your form.

private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
    // Verify that we're not being closed because windows is shutting down.
    if (e.CloseReason != CloseReason.WindowsShutDown)
    {
        // Show your dialog / cancel closing. 
    }
}

N.B: You might also want to include CloseReason.TaskManagerClosing as the user clearly wants to close your application in that scenario and the taskmanager already asks for confirmation. Or alternatively only show your dialog for CloseReason.UserClosing.




回答2:


In the Closing event handler, which you can define like this:

    this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);

and where I guess you are posting your confirmation dialog, you can check theCloseReason argument, and not post the dialog if it is the shutdown that causes it:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.WindowsShutDown)
        {
            //do not show the dialog
        }
    }



回答3:


SystemEvents can help you. The SessionEnding occurs when the user is trying to log off or shut down the system.

Microsoft.Win32.SystemEvents.SessionEnding += (sender, e) => DoYourJob();



回答4:


you can use Application.SessionEnding Event to understand if the system is about to shutdown

http://msdn.microsoft.com/en-us/library/system.windows.application.sessionending.aspx




回答5:


You could listen for the shutdown event and quit the application without a message box.



来源:https://stackoverflow.com/questions/8137070/force-application-close-on-system-shutdown

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!