2012-09-13 13 views
47

Podczas debugowania aplikacji C# zauważyłem dużą liczbę wystąpień następującego zdania: "Wątek - zakończył się kodem 0 (0x0)." Aplikacja nadal działa i żaden wyjątek nie jest przechwytywany/nieobsługiwany.Wątek zakończył się kodem 0 (0x0) bez wyjątku nieobsługiwanego

Aplikacja działa na systemie Windows 7 64bit i debugowana przy użyciu platformy x86.

+1

Czy na pewno ci są twoje wątki? Jeśli tak, czy nie oczekujesz, że skończą? – SLaks

Odpowiedz

63

To jest właśnie debugowanie wiadomości. Możesz wyłączyć tę funkcję, klikając prawym przyciskiem myszy okno wyjściowe i odznaczając komunikat zakończenia wątku.

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

Dodatkowo zaprogramować się z aplikacji, z Wyjście okno może wyświetlać informacje o:

  • Moduły debugger został załadowany lub rozładowany.

  • Wyjątki, które są zgłaszane.

  • Procesy wychodzące.

  • Nici wychodzące.

2

jeśli twoja aplikacja używa wątków bezpośrednio lub pośrednio (tj. Za sceną, jak w bibliotece 3rd party), jest absolutnie powszechne, że wątki kończą się po zakończeniu ... co w zasadzie opisujesz ... debugger pokazuje ten komunikat ... możesz skonfigurować debugger tak, aby nie wyświetlał tego komunikatu, jeśli go nie chcesz ...

Jeśli powyższe nie pomoże, podaj więcej szczegółów, ponieważ nie jestem pewien, co dokładnie problemem jest Twoja twarz ...

5

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

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

+0

Wątki, o których mówiłem, nie są moje (lub nie należą do mojej aplikacji). Jednak moja aplikacja musi połączyć się z serwerem Linux AIX, który wraca z ogromną ilością nieistniejących procesów. Nie mam jasnego pojęcia o tym, że ten serwer działa (i które są jego zadaniami), ale przypuszczam, że wyżej wymienione wątki mogą mieć wpływ na zachowanie serwera. – Gionata

+0

Cóż, być może wątki wpływają na twoją aplikację, ale wiadomość, którą otrzymujesz, mówi, że kończą się pomyślnie. Możesz więc spróbować dowiedzieć się, dlaczego są uruchamiane (menu Debug => windows => wątki), ale to normalne, że się kończą. – Kek

+0

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

1

Ramy tworzy wątki wspierać każde okno tworzyć, na przykład, jak podczas tworzenia postaci i .Show() to. Kiedy okna się zamykają, wątki są kończone (tzn. Wychodzą).

Jest to normalne zachowanie. Jeśli jednak aplikacja tworzy wątki i istnieje wiele komunikatów wyjścia wątku odpowiadających tym wątkom (można powiedzieć, że nazwy wątków, poprzez nadanie im różnych nazw w aplikacji), być może wskazuje to na problem z aplikacją, która tworzy wątki, gdy nie powinna, z powodu błędu logiki programu.

Byłoby interesującym posunięciem, gdyby oryginalny plakat dał nam znać, co odkrył odnośnie problemów z awarią serwera. Mam wrażenie, że nie miałoby to nic wspólnego z tym ... ale trudno jest powiedzieć z zamieszczonych informacji.

3

W celu zakończenia BlueM zaakceptował odpowiedź, można go Wyłącz, tutaj:

Narzędzia> Opcje> debugowania> Ustawienia wyjściowe Ogólne> wątku Wyjdź Wiadomości: Off

+0

Przyjęta odpowiedź BlueM ma w rzeczywistości prostsze rozwiązanie: _ "Możesz wyłączyć tę funkcję, klikając prawym przyciskiem myszy w oknie wyjściowym i odznaczając komunikat kończący wątek" _ –

Powiązane problemy