2011-11-01 20 views
18

Ho un'applicazione C# multi-threaded e ha il lock reader reader, ma dà un'eccezione di timeout su alcuni computer (non essendo in grado di acquisire un lock in tempo) e ho bisogno di chiudere forzatamente tutti i thread. come faccio a fare senza eccezioni?Come forzare l'applicazione di uscita in C#?

+4

'Environment.FailFast (int)' ucciderà la tua applicazione il più velocemente possibile. – vcsjones

+0

Possibile duplicato di http://stackoverflow.com/questions/1057151/application-exit – angularsen

risposta

12

Environment.FailFast potrebbe essere quello che stai cercando, ma prenditi cura degli effetti collaterali: nessun finalizzatore, infine blocchi o altro viene eseguito. Termina davvero il processo ORA.

+1

ok, l'ho usato e mi ha dato questa eccezione: Il runtime ha riscontrato un errore irreversibile. L'indirizzo dell'errore era a 0x044f07bd, sul thread 0xfb0. Il codice di errore è 0x80131623. Questo errore potrebbe essere un bug nel CLR o nelle parti non sicure o non verificabili del codice utente. Le fonti comuni di questo bug includono errori di marshalling dell'utente per COM-Interop o PInvoke, che possono danneggiare lo stack. – armin

+1

Vale la pena citare l'opzione di Environment.Exit. Entrambi sono garantiti per uscire praticamente subito, ma Exit non genera un evento di errore evento di sistema e avvia il finalizzatore try/finally. – angularsen

4

Per uscire con forza l'applicazione da subito è possibile utilizzare Environment.FailFast()

15

Se si vuole uccidere programma senza alcun messaggio di eccezione dal sistema, dopo aver per esempio errore fatale, è possibile utilizzare:

Process.GetCurrentProcess().Kill() 
+0

Ho usato questo e ha funzionato, grazie. – Jeremy

13

penso la soluzione migliore per forzare uscita applicazione è di utilizzare la seguente riga di codice:

Environment.Exit(0) 

Envrironment.FailFast() finisce con un eccezione di runtime.

+1

Grazie - questo ha funzionato meglio per me perché volevo evitare le eccezioni. – stuzor

0

Questa potrebbe essere una risposta irrilevante se si sta cercando un codice C# puro per terminare l'applicazione, ma è possibile utilizzare un modulo nativo di processi di terminazione come il comando taskkill, che terminerà sicuramente l'applicazione.

Provalo. Aggiungi prima il riferimento al sistema.

using System.Diagnostics; 

Ovunque è necessario terminare il processo,

String process = Process.GetCurrentProcess().ProcessName; 
Process.Start("cmd.exe", "/c taskkill /F /IM " + process + ".exe /T"); 
  • /F - le forze per terminare.
  • /T - Termina la struttura del processo (processo e qualsiasi altro processo avviato da esso).
  • /IM - Nome immagine o nome processo.