Il thread è terminato con il codice 0 (0x0) senza eccezioni non gestite


93

Durante il debug della mia applicazione C # ho notato una grande quantità di occorrenze della seguente frase:

Il thread - è terminato con il codice 0 (0x0).

L'applicazione continua a funzionare e nessuna eccezione viene rilevata / non gestita.

L'applicazione è in esecuzione su Windows 7 a 64 bit ed è stata sottoposta a debug con la piattaforma x86.


1
Sei sicuro che quelli siano i tuoi fili? Se è così, non ti aspetti che finiscano?
SLaks

Risposte:


137

Questo è solo un messaggio di debug. Puoi disattivarlo facendo clic con il pulsante destro del mouse nella finestra di output e deselezionando Thread Exit Messages.

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

Oltre al programma fuori dall'applicazione, la finestra Output può visualizzare le informazioni su:

  • Moduli che il debugger ha caricato o scaricato.

  • Eccezioni che vengono generate.

  • Processi che escono.

  • Discussioni che escono.


10

Bene, un'applicazione potrebbe avere molti thread in esecuzione in parallelo. Alcuni sono gestiti da te, il programmatore, altri sono gestiti da classi di framework (specialmente se ti trovi in ​​un ambiente GUI).

Quando un thread ha terminato il suo compito, esce e smette di esistere. Non c'è niente di allarmante in questo e non dovresti preoccuparti.


I thread di cui ho parlato non sono miei (o non appartengono alla mia applicazione). Tuttavia la mia applicazione deve connettersi a un server Linux AIX che ritorna con un'enorme quantità di processi defunti. Non ho un'idea chiara del funzionamento di questo server (e quali sono i suoi compiti) ma suppongo che i suddetti thread potrebbero influire sul comportamento del server.
Gionata

Bene, forse i thread influiscono effettivamente sulla tua applicazione, ma il messaggio che ricevi ti dice che terminano correttamente. Quindi potresti provare a scoprire perché vengono eseguiti (menu Debug => windows => thread), ma questo è normale che finiscano.
Kek

Terminano normalmente, ma i processi defunti del server Linux potrebbero essere un effetto collaterale dei thread di .net framework. Forse l'applicazione presenta vari errori di programmazione nell'implementazione del multithreading. È possibile?
Gionata

Non lo so. Questo server linuw esegue .NET? usando Mono? Qual è il tuo problema in realtà? I processi defunti?
Kek

Sì, i processi non funzionanti provocano il crash del server Linux.
Gionata

7

Per completare la risposta accettata da BlueM, puoi disattivarla qui:

Strumenti> Opzioni> Debug> Impostazioni generali di output> Messaggi di uscita thread: disattivato


4
La risposta accettata da BlueM ha in realtà una soluzione più semplice: "Puoi disattivarla facendo clic con il pulsante destro del mouse nella finestra di output e deselezionando il messaggio di fine thread"
Simon MᶜKenzie

5

se la tua applicazione utilizza i thread direttamente o indirettamente (cioè dietro le quinte come in una libreria di terze parti) è assolutamente comune che i thread terminino dopo che sono stati completati ... che è fondamentalmente ciò che descrivi ... il debugger mostra questo messaggio ... puoi configurare il debugger per non visualizzare questo messaggio se non lo vuoi ...

Se quanto sopra non aiuta, si prega di fornire maggiori dettagli poiché non sono sicuro di quale sia esattamente il problema che stai affrontando ...


1

Il framework crea thread per supportare ogni finestra che crei, ad esempio, come quando crei un Form e .Show (). Quando le finestre si chiudono, i thread vengono terminati (ovvero, escono).

Questo è un comportamento normale. Tuttavia, se l'applicazione sta creando thread e ci sono molti messaggi di uscita dal thread corrispondenti a questi thread (si potrebbe dire possibilmente dai nomi del thread, dando loro nomi distinti nell'app), allora forse questo è indicativo di un problema con l'app che crea thread quando non dovrebbe, a causa di un errore di logica del programma.

Sarebbe un seguito interessante se il poster originale ci facesse sapere cosa ha scoperto riguardo ai problemi con il crash del server. Ho la sensazione che non avrebbe nulla a che fare con questo ... ma è difficile dirlo dalle informazioni pubblicate.


1

L'esecuzione di query Linq può generare thread aggiuntivi. Quando provo a eseguire codice che utilizza la raccolta di query Linq nella finestra immediata, spesso si rifiuta di eseguire perché non sono disponibili abbastanza thread per il debugger.

Come altri hanno già detto, l'uscita dei thread al termine è perfettamente normale.


0

Ho anche affrontato questo problema e la soluzione è:

  1. aprire Esplora soluzioni
  2. fare doppio clic sul file Program.cs

Ho aggiunto di nuovo questo codice e il mio programma ha funzionato correttamente:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.