Wątek zakończył działanie z kodem 0 (0x0) bez nieobsługiwanego wyjątku


97

Podczas debugowania mojej aplikacji w języku C # zauważyłem dużą ilość wystąpień następującego zdania:

Wątek - zakończył pracę z kodem 0 (0x0).

Aplikacja nadal działa i żaden wyjątek nie jest złapany / nieużywany.

Aplikacja działa na 64-bitowym systemie Windows 7 i debuguje na platformie x86.


1
Czy na pewno to Twoje wątki? Jeśli tak, czy nie oczekujesz, że skończą?
SLaks

Odpowiedzi:


142

To jest tylko komunikat dotyczący debugowania. Możesz to wyłączyć, klikając prawym przyciskiem myszy okno wyjściowe i odznaczając Thread Exit Messages.

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

Oprócz programowania z poziomu aplikacji w oknie Wyjście można wyświetlić informacje o:

  • Moduły załadowane lub usunięte przez debuger.

  • Wyjątki, które są rzucane.

  • Procesy, które kończą się.

  • Wątki, które wychodzą.


10

Cóż, aplikacja może mieć wiele wątków działających równolegle. Niektóre są uruchamiane przez Ciebie, programistę, inne są uruchamiane przez klasy frameworka (szczególnie jeśli jesteś w środowisku GUI).

Gdy wątek zakończy swoje zadanie, zamyka się i przestaje istnieć. Nie ma w tym nic niepokojącego i nie powinno Cię to obchodzić.


Wątki, o których mówiłem, nie są moje (lub nie należą do mojej aplikacji). Jednak moja aplikacja musi łączyć się z serwerem Linux AIX, który powraca z ogromną liczbą niedziałających procesów. Nie mam jasnego pojęcia o tym, jak działa ten serwer (i jakie są jego zadania), ale przypuszczam, że wspomniane wyżej wątki mogą mieć wpływ na zachowanie serwera.
Gionata

Cóż, może faktycznie wątki wpływają na twoją aplikację, ale otrzymany komunikat mówi, że zakończyły się pomyślnie. Możesz więc spróbować dowiedzieć się, dlaczego są uruchamiane (menu debugowania => windows => wątki), ale to normalne, że się kończą.
Kek

Kończą się normalnie, ale niedziałające procesy serwera Linux mogą być efektem ubocznym wątków struktury .net. Może aplikacja ma różne błędy programistyczne w implementacji wielowątkowej. Czy to możliwe?
Gionata,

Nie wiem Na tym serwerze linuw działa .NET? używając Mono? Jaki jest twój problem? Zlikwidowane procesy?
Kek

Tak, dufunct procesy powodujące awarię serwera Linux.
Gionata

7

Aby uzupełnić zaakceptowaną odpowiedź BlueM, możesz ją dezaktywować tutaj:

Narzędzia> Opcje> Debugowanie> Ogólne ustawienia wyjściowe> Komunikaty zakończenia wątku: wyłączone


5
Zaakceptowana odpowiedź BlueM ma w rzeczywistości prostsze rozwiązanie: „Możesz to wyłączyć, klikając prawym przyciskiem myszy w oknie wyjściowym i
odznaczając

5

jeśli twoja aplikacja używa wątków bezpośrednio lub pośrednio (tj. za kulisami, jak w bibliotece innej firmy), jest to absolutnie powszechne, że wątki kończą się po ich zakończeniu ... co jest w zasadzie tym, co opisujesz ... debugger wyświetla ten komunikat ... możesz skonfigurować debuger tak, aby nie wyświetlał tego komunikatu, jeśli tego nie chcesz ...

Jeśli powyższe nie pomoże, podaj więcej szczegółów, ponieważ nie jestem pewien, z czym dokładnie masz problem ...


1

Framework tworzy wątki do obsługi każdego tworzonego okna, np. Podczas tworzenia Form i .Show () go. Kiedy okna się zamykają, wątki są przerywane (tj. Wychodzą).

To normalne zachowanie. Jeśli jednak aplikacja tworzy wątki i istnieje wiele komunikatów o wyjściu wątku odpowiadających tym wątkom (można by to stwierdzić prawdopodobnie po nazwach wątków, nadając im różne nazwy w aplikacji), to być może wskazuje to na problem z aplikacją tworzącą wątki, gdy nie powinna, z powodu błędu logiki programu.

Byłoby interesującym uzupełnieniem, gdyby oryginalny plakat poinformował nas o tym, co odkrył w związku z problemami z awarią serwera. Wydaje mi się, że nie miałoby to z tym nic wspólnego ... ale trudno to stwierdzić na podstawie zamieszczonych informacji.


1

Wykonywanie zapytań Linq może generować dodatkowe wątki. Kiedy próbuję wykonać kod, który korzysta z kolekcji zapytań Linq w bezpośrednim oknie, często odmawia wykonania, ponieważ debugger ma za mało wątków.

Jak powiedzieli inni, wyjście nitek po ich zakończeniu jest całkowicie normalne.


-1

Ja też stanąłem przed tym problemem i rozwiązaniem jest:

  1. otwórz Rozwiązanie Explore
  2. kliknij dwukrotnie plik Program.cs

Dodałem ten kod ponownie i mój program działał poprawnie:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.