Tomas Grosup
Tomas Grosup

Reputation: 6514

How to tell whether closing via close button or via Application.Shutdown in WPF?

I added a code for standard "Are you sure you want to exit?" message inside the this.Closing event of my main window.

It works as expected for closing from the gui, however I would like to disable this check when the application is closed via Application.Shutdown().

There is no event in the Application fired before the window gets closed and the Shutdown method cannot be overriden.

How can I detect what invoked the closing of the window?

Upvotes: 3

Views: 1053

Answers (2)

Alternator
Alternator

Reputation: 164

Disclaimer: I'd make this a comment rather than an answer if I could as it is a dirty hack (not a clean one). But if you really need something and no better solutions present itself I'll post it anyway to hopefully help...

If you're definitely not in a position to control / hook the parts of the code base that are calling application shutdown, then the possibility is to find something else that responds to the shutdown that you can trip before your window closes.

My (not so ideal) thought on that is to set up another hidden window (SO: Loading a WPF Window without showing it) that the user wont interact with but the application will close on shutdown.

In the closing event of that window you can set a flag to indicate the application is shutting down. Then in your main window's closing event you can react to that flag.

The big issue to tackle is configuring things so that the hidden window will always close before the Main Window(s) safely.

I did some limited tests with MainWindow.Xaml as the application Startupuri, and creating the hidden window from the application.onstartup event and found the hidden window would close first - but I wouldn't want to gaurantee that in all scenerios! Actually getting this working and tested adequately could be a lot of work - as I said it's a last restort dirty hack.

Upvotes: 1

Wolfgang Ziegler
Wolfgang Ziegler

Reputation: 1685

Who calls Application.Shutdown()? If you are in Charge of that just set a flag indicating that you did it and check for that flag in the Closing event handler.

Upvotes: 0

Related Questions