Utas telah keluar dengan kode 0 (0x0) tanpa pengecualian yang tidak tertangani


97

Saat men-debug aplikasi C # saya, saya telah memperhatikan sejumlah besar kemunculan kalimat berikut:

Utas - telah keluar dengan kode 0 (0x0).

Aplikasi terus bekerja dan tidak terkecuali tersangkut / tidak tertangani.

Aplikasi ini berjalan pada Windows 7 64bit dan di-debug dengan platform x86.


1
Apakah Anda yakin itu adalah utas Anda? Jika demikian, apakah Anda tidak mengharapkan mereka selesai?
SLaks

Jawaban:


142

Ini hanya pesan debugging. Anda dapat mematikannya dengan mengklik kanan ke dalam jendela output dan menghapus centang Thread Exit Messages.

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

Selain memprogram dari aplikasi Anda, jendela Output dapat menampilkan informasi tentang:

  • Modul yang telah dimuat atau dibongkar debugger.

  • Pengecualian yang terlempar.

  • Memproses keluar itu.

  • Utas yang keluar.


10

Nah, sebuah aplikasi mungkin memiliki banyak utas yang berjalan secara paralel. Beberapa dijalankan oleh Anda, pembuat kode, beberapa dijalankan oleh kelas kerangka kerja (terutama jika Anda berada di lingkungan GUI).

Saat utas menyelesaikan tugasnya, utas keluar dan berhenti untuk eksis. Tidak ada yang mengkhawatirkan dalam hal ini dan Anda tidak perlu peduli.


Utas yang telah saya diskusikan bukan milik saya (atau bukan milik aplikasi saya). Namun aplikasi saya perlu terhubung ke server AIX Linux yang kembali dengan sejumlah besar proses yang tidak berfungsi. Saya tidak memiliki gagasan yang jelas tentang server ini berfungsi (dan yang merupakan tugasnya) tetapi saya kira bahwa utas yang disebutkan di atas dapat memengaruhi perilaku server.
Gionata

Mungkin untaian tersebut benar-benar memengaruhi aplikasi Anda, tetapi pesan yang Anda terima memberi tahu Anda bahwa mereka berhasil dihentikan. Jadi Anda dapat mencoba dan menemukan mengapa mereka dijalankan (menu Debug => windows => utas), tetapi ini normal mereka berakhir.
Kek

Mereka berakhir secara normal tetapi proses penghentian server Linux dapat menjadi efek samping dari utas kerangka kerja .net. Mungkin aplikasi tersebut memiliki berbagai kesalahan pemrograman dalam implementasi multithreading. Apa itu mungkin?
Gionata

Saya tidak tahu. Server linuw ini menjalankan .NET? menggunakan Mono? Apa masalahmu sebenarnya? Proses yang tidak berfungsi?
Kek

Ya, proses yang tidak berfungsi membuat crash Server Linux.
Gionata

7

Untuk menyelesaikan jawaban yang diterima BlueM, Anda dapat menonaktifkannya di sini:

Alat> Opsi> Debugging> Pengaturan Output Umum> Pesan Keluar Utas: Nonaktif


5
Jawaban yang diterima BlueM sebenarnya memiliki solusi yang lebih sederhana: "Anda dapat mematikannya dengan mengklik kanan ke jendela keluaran dan menghapus centang pada pesan yang berakhir"
Simon MᶜKenzie

5

jika aplikasi Anda menggunakan utas secara langsung atau tidak langsung (yaitu di belakang layar seperti di pustaka pihak ke-3) sangatlah umum untuk menghentikan utas setelah selesai ... yang pada dasarnya adalah apa yang Anda gambarkan ... debugger menampilkan pesan ini ... Anda dapat mengkonfigurasi debugger agar tidak menampilkan pesan ini jika Anda tidak menginginkannya ...

Jika hal di atas tidak membantu, berikan detail lebih lanjut karena saya tidak yakin apa sebenarnya masalah yang Anda hadapi ...


1

Kerangka kerja membuat utas untuk mendukung setiap jendela yang Anda buat, misalnya, seperti ketika Anda membuat Formulir dan .Show () itu. Saat jendela menutup, utas akan dihentikan (yaitu, keluar).

Ini adalah perilaku normal. Namun, jika aplikasi membuat utas, dan ada banyak pesan keluar utas yang sesuai dengan utas ini (orang bisa tahu mungkin dari nama utas, dengan memberi mereka nama yang berbeda di aplikasi), maka mungkin ini indikasi masalah dengan aplikasi membuat utas padahal seharusnya tidak, karena kesalahan logika program.

Ini akan menjadi tindak lanjut yang menarik untuk memiliki poster asli memberi tahu kami apa yang dia temukan terkait masalah dengan server yang mogok. Saya merasa itu tidak ada hubungannya dengan ini ... tetapi sulit untuk mengatakan dari informasi yang diposting.


1

Menjalankan query Linq dapat menghasilkan thread tambahan. Ketika saya mencoba untuk mengeksekusi kode yang menggunakan kumpulan kueri Linq di jendela langsung, sering kali menolak untuk dijalankan karena tidak cukup utas tersedia untuk debugger.

Seperti yang dikatakan orang lain, utas keluar setelah selesai adalah normal.


-1

Saya juga menghadapi masalah ini dan solusinya adalah:

  1. buka Solution Explore
  2. klik dua kali pada file Program.cs

Saya menambahkan kode ini lagi dan program saya berjalan dengan akurat:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.