Потік вийшов із кодом 0 (0x0) без жодних необроблених винятків


97

Під час налагодження мого додатка C # я помітив велику кількість випадків наступного речення:

Потік - вийшов із кодом 0 (0x0).

Додаток продовжує працювати, і жоден виняток не перехоплюється / не передається.

Додаток працює на Windows 7 64bit і налагоджено на платформі x86.


1
Ви впевнені, що це ваші нитки? Якщо так, то чи не очікуєте ви, що вони закінчать?
Слакс

Відповіді:


142

Це просто повідомлення про налагодження. Ви можете вимкнути це, клацнувши правою кнопкою миші у вікні виводу та зніміть прапорець Thread Exit Messages.

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

На додаток до програми з вашої програми, у вікні виводу може відображатися інформація про:

  • Модулі, які завантажив або розвантажив налагоджувач.

  • Винятки, які кидають.

  • Процеси, що виходять.

  • Нитки, що виходять.


10

Ну, у додатку може бути багато потоків, які працюють паралельно. Деякі з них запускаються вами, кодером, інші - за допомогою каркасних класів (особливо, якщо ви перебуваєте в середовищі графічного інтерфейсу).

Коли потік закінчив своє завдання, він виходить і припиняє своє існування. Тобто в цьому немає нічого тривожного, і ви не повинні дбати.


Теми, про які я обговорював, не є моїми (або не належать до моєї програми). Однак моєму додатку потрібно підключитися до сервера AIX Linux, який повертається з величезною кількістю неіснуючих процесів. Я не чітко уявляю, як працює цей сервер (і які його завдання), але я вважаю, що вищезазначені потоки можуть вплинути на поведінку сервера.
Gionata

Ну, можливо, потоки насправді впливають на вашу програму, але повідомлення, яке ви отримуєте, повідомляє, що вони успішно завершуються. Тому ви можете спробувати знайти, чому вони запускаються (меню налагодження => windows => потоки), але це нормально, що вони закінчуються.
Кек

Вони закінчуються нормально, але неіснуючі процеси сервера Linux можуть бути побічним ефектом потоків .net framework. Можливо, програма має різні помилки програмування при реалізації багатопоточності. Це можливо?
Gionata

Не знаю. На цьому сервері linuw працює .NET? за допомогою Mono? Яка ваша проблема насправді? Неіснуючі процеси?
Кек,

Так, dufunct-процеси роблять збій Linux Server.
Gionata

7

Щоб заповнити прийняту відповідь BlueM, ви можете її деактивувати тут:

Інструменти> Параметри> Налагодження> Загальні налаштування виводу> Повідомлення про вихід потоку: Вимк


5
Прийнята відповідь BlueM насправді має простіше рішення: "Ви можете вимкнути це, клацнувши правою кнопкою миші у вікні виводу і
знявши

5

якщо ваш додаток використовує потоки прямо чи опосередковано (тобто за кадром, як у сторонній бібліотеці), абсолютно загальноприйнято закінчувати потоки після їх закінчення ... що, в основному, ви описуєте ... налагоджувач показує це повідомлення ... ви можете налаштувати налагоджувач, щоб не відображати це повідомлення, якщо ви цього не хочете ...

Якщо вищезазначене не допомагає, надайте більше деталей, оскільки я не впевнений, з якою саме проблемою стикаєтесь ви ...


1

Фреймворк створює потоки для підтримки кожного створеного вами вікна, наприклад, коли ви створюєте форму та .Show () її. Коли вікна закриваються, нитки припиняються (тобто вони виходять).

Це нормальна поведінка. Однак, якщо додаток створює потоки, і є багато повідомлень про вихід потоків, що відповідають цим потокам (можна було б визначити, можливо, за іменами потоків, давши їм різні імена в програмі), то, можливо, це свідчить про проблему з додатком, який створює потоки, коли цього не слід, через помилку логіки програми.

Було б цікавим продовженням, коли б оригінальний плакат повідомив нас, що він / вона виявив щодо проблем із збоєм сервера. Я відчуваю, що це не мало б нічого спільного з цим ... але це важко визначити за розміщеною інформацією.


1

Виконання запитів Linq може генерувати додаткові потоки. Коли я намагаюся виконати код, який використовує колекцію запитів Linq у безпосередньому вікні, він часто відмовляється запускатись, оскільки для налагоджувача недостатньо потоків.

Як казали інші, вихід потоків після їх закінчення є цілком нормальним.


-1

Я також зіткнувся з цією проблемою, і її рішення:

  1. відкрити Solution Explore
  2. двічі клацніть на файл Program.cs

Я знову додав цей код, і моя програма працювала точно:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.