Domanda

Titolo di proposito. WPF app con alcune cose WCF per IPC. Chiamo Application.Current.Shutdown() e l'applicazione continua felicemente. Ho pensato Shutdown doveva essere inarrestabile.

Forse perché è stato chiamato da un thread in background? Ho bisogno di fare un po 'giocherellare dispatcher?

È stato utile?

Soluzione

Si ottiene un'eccezione quando chiamo Application.Current.Shutdown in qualsiasi thread diverso da quello principale, quindi potrebbe supporre dove l'utilizzo di "dispatcher giocherellare" correttamente già.

In ogni caso, questo si compila e si chiude un'applicazione, quindi se il bit dispatcher non sembra quello che hai potresti fionda in:

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

Altri suggerimenti

Nella mia esperienza tutte le discussioni devono entrambi essere chiuso esplicitamente o essere contrassegnati come thread in background in modo che l'applicazione per chiudere.

Ecco un esempio di calci fuori un filo di lettura in background:

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

La proprietà IsBackground è la chiave. Senza che essere impostato, il filo non terminerà quando si chiama Shutdown.

Ho solo esperienza Application.Current.Shutdown non funziona quando sono in esecuzione da Visual Studio. All'interno di Visual Studio (almeno la versione 2010 che sto usando) Application.Current.Shutdown non fare una cosa. Se ho solo passo attraverso di essa esegue questa linea e poi continua. Se corro il programma (come .exe) da Windows Explorer quindi Application.Current.Shutdown funziona bene.

Non è probabilmente una spiegazione per questo dal momento che durante il debug altri thread sono attive, ma non riesco a spiegarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top