2012-09-13 17 views
47

Durante il debug dell'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 catturata/non gestita.Il thread è terminato con codice 0 (0x0) senza eccezione non mano

L'applicazione è in esecuzione su Windows 7 a 64 bit e debug con piattaforma x86.

+1

Sei sicuro questi sono i thread? Se è così, non ti aspetti che finiscano? – SLaks

risposta

63

Questo è solo un messaggio di debug. È possibile disattivarlo facendo clic con il pulsante destro del mouse nella finestra di output e deselezionare il messaggio thread ended.

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

Oltre a programmare fuori dalla vostra applicazione, il uscita finestra in grado di visualizzare le informazioni su:

  • Moduli il debugger è stato caricato o scaricato.

  • eccezioni che vengono gettati.

  • Processi che escono.

  • Fili quell'uscita.

2

se la tua applicazione utilizza i thread direttamente o indirettamente (cioè dietro la scena come in una libreria di terze parti) è assolutamente normale che i thread terminino dopo che sono terminati ... che è in pratica 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 allora si prega di fornire maggiori dettagli in quanto non sono sicuro di quale sia esattamente il problema sei faccia ...

5

Bene, un'applicazione potrebbe avere molti thread in esecuzione in parallelo. Alcuni sono gestiti da te, il programmatore, alcuni sono gestiti da classi di framework (in particolare se sei in un ambiente GUI).

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

+0

I thread di cui ho discusso non sono miei (o non appartengono alla mia applicazione). Tuttavia la mia applicazione deve connettersi a un server Linux AIX che ritorna con una quantità enorme di processi defunti. Non ho una chiara idea di questo server funziona (e quali sono i suoi compiti), ma suppongo che i thread di cui sopra potrebbero avere un impatto sul comportamento del server. – Gionata

+0

Beh, forse i thread hanno un impatto sulla tua applicazione, ma il messaggio che ricevi ti dice che terminano con successo. Quindi potresti provare a capire perché vengono eseguiti (menu Debug => windows => thread), ma è normale che finiscano. – Kek

+0

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

1

Il quadro crea discussioni per sostenere ogni finestra si crea, ad esempio, come quando si crea un modulo e .Show() esso. Quando le finestre si chiudono, i thread sono terminati (cioè, escono).

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

sarebbe un follow interessante avere il manifesto originale fateci sapere cosa s/ha scoperto quanto riguarda i problemi con il server crash. Ho la sensazione che non avrebbe nulla a che fare con questo ... ma è difficile da dire dalle informazioni pubblicate.

3

Al fine di completare risposta accettato di BlueM, è possibile disattivarlo qui:

Strumenti> Opzioni> Debug> Impostazioni di uscita Generale> Discussione di uscita Messaggi: Spento

+0

La risposta accettata di BlueM in realtà ha una soluzione più semplice: _ "È possibile disattivarlo facendo clic con il pulsante destro del mouse nella finestra di output e deselezionare il messaggio terminato sul thread" _ –

Problemi correlati