Поток завершился с кодом 0 (0x0) без необработанного исключения


97

При отладке моего приложения C # я заметил большое количество появлений следующего предложения:

Поток завершился с кодом 0 (0x0).

Приложение продолжает работать, и никакие исключения не перехватываются / не обрабатываются.

Приложение работает на 64-битной Windows 7 и отлажено на платформе x86.


1
Вы уверены, что это ваши темы? Если да, то не ожидаете ли вы, что они закончат?
SLaks

Ответы:


142

Это просто отладочное сообщение. Вы можете отключить это, щелкнув правой кнопкой мыши в окне вывода и сняв флажок Thread Exit Messages.

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

В дополнение к программному выходу из вашего приложения, окно вывода может отображать информацию о:

  • Модули, которые отладчик загрузил или выгружал.

  • Выбрасываемые исключения.

  • Выходящие процессы.

  • Потоки, которые выходят.


10

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

Когда поток завершает свою задачу, он завершает свое существование. То есть ничего тревожного в этом нет, да и вам наплевать.


Обсуждения, о которых я говорил, не мои (или не принадлежат моему приложению). Однако моему приложению необходимо подключиться к серверу Linux AIX, который возвращается с огромным количеством неработающих процессов. У меня нет четкого представления о том, как работает этот сервер (и каковы его задачи), но я полагаю, что вышеупомянутые потоки могут повлиять на поведение сервера.
Gionata

Что ж, может быть, потоки действительно влияют на ваше приложение, но в полученном сообщении говорится, что они успешно завершаются. Итак, вы можете попытаться выяснить, почему они запускаются (меню отладки => окна => потоки), но это нормально, что они заканчиваются.
Kek

Они заканчиваются нормально, но неработающие процессы сервера Linux могут быть побочным эффектом потоков .net framework. Возможно, приложение имеет различные программные ошибки при реализации многопоточности. Является ли это возможным?
Gionata

Я не знаю. На этом сервере linuw работает .NET? используя Mono? В чем собственно проблема? Несуществующие процессы?
Kek

Да, процессы dufunct вызывают сбой Linux-сервера.
Gionata

7

Чтобы завершить принятый ответ BlueM, вы можете деактивировать его здесь:

Инструменты> Параметры> Отладка> Общие настройки вывода> Сообщения о выходе из потока: Выкл.


5
Принятый ответ BlueM на самом деле имеет более простое решение: «Вы можете отключить это, щелкнув правой кнопкой мыши в окне вывода и
сняв отметку с

5

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

Если вышеперечисленное не помогло, предоставьте более подробную информацию, поскольку я не уверен, с какой именно проблемой вы столкнулись ...


1

Фреймворк создает потоки для поддержки каждого создаваемого вами окна, например, как при создании Form и .Show () it. Когда окна закрываются, потоки завершаются (т. Е. Выходят).

Это нормальное поведение. Однако, если приложение создает потоки, и есть много сообщений о выходе из потока, соответствующих этим потокам (можно сказать, возможно, по именам потоков, дав им разные имена в приложении), то, возможно, это указывает на проблему. приложение создает потоки, когда этого не следует делать из-за логической ошибки программы.

Было бы интересным продолжением, если бы исходный плакат сообщал нам, что он / она обнаружил в отношении проблем с отказом сервера. У меня такое чувство, что это не имеет к этому никакого отношения ... но это сложно сказать по опубликованной информации.


1

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

Как говорили другие, выход потоков, когда они завершены, совершенно нормально.


-1

Я тоже столкнулся с этой проблемой, и решение:

  1. открыть решение изучить
  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.