Application.Current.Shutdown() doesn't

12,075

Solution 1

You get an exception when I call Application.Current.Shutdown in any thread other than the main one, so I'd assume you where using "dispatcher fiddling" properly already.

In any case, this compiles and quits an application, so if the dispatcher bit doesn't look like what you have you could sling it in:

ThreadStart ts = delegate()
    {
        Dispatcher.BeginInvoke((Action)delegate()
        {
            Application.Current.Shutdown();
        });
     };
 Thread t = new Thread(ts);
 t.Start();

Solution 2

In my experience all threads have to either be terminated explicitly or be marked as background threads in order for the application to close.

Here is an example of kicking off a read thread in the background:

_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();

The IsBackground property is the key. Without that being set, the thread won't terminate on when you call Shutdown.

Solution 3

I only experience Application.Current.Shutdown not working when I'm running from Visual Studio. Within Visual Studio (at least the 2010 version I'm using) Application.Current.Shutdown doesn't do a thing. If I single step through it executes this line and then continues. If I run the program (as an .exe) from Windows Explorer then Application.Current.Shutdown works fine.

There is probably an explanation for this since during debug other threads are active, but I can't explain it.

Share:
12,075
Thomas
Author by

Thomas

C++/C# primarily. Familiar with a number of scripting languages. Qt and WPF for ui toolkits. Learning ASP.NET MVC, CSS, and Silverlight.

Updated on August 04, 2022

Comments

  • Thomas
    Thomas almost 2 years

    Title's about it. WPF app with some WCF stuff for IPC. I call Application.Current.Shutdown() and the app continues on happily. I thought Shutdown was supposed to be unstoppable.

    Perhaps because it's being called from a background thread? Do I need to do some dispatcher fiddling?

  • Thomas
    Thomas over 14 years
    The app closes normally through other means though.
  • Adam Prax
    Adam Prax about 13 years
    Thanks a bunch for this comment, it saved me some major head ache trying to figure out why my application wasn't exiting completely.
  • StrikeForceZero
    StrikeForceZero about 8 years
    I was trying to figure this out and this seems to work. Is there any explanation for how wrapping a dispatcher call in a thread makes it happy?
  • Zunair
    Zunair almost 8 years
    Some classes uses threads that does not run on background. And Shutdown usually kills only background threads automatically. So you should try to make sure to dispose any variables that uses a class that uses threading before exiting.
  • ProfK
    ProfK over 7 years
    Yea, same here, but it really messes with my debugging.
  • Emond
    Emond about 6 years
    Changes are that the application is actually crashing when the debugger is not attached.
  • Josh
    Josh almost 6 years
    Note that this seems to refer to Application.Current.Dispatcher, not System.Windows.Threading.Dispatcher.