スレッドは未処理の例外なしでコード0(0x0)で終了しました


93

C#アプリケーションのデバッグ中に、次の文が大量に発生していることに気付きました。

スレッド-コード0(0x0)で終了しました。

アプリケーションは引き続き機能し、例外はキャッチされず、ハンドされません。

アプリケーションはWindows 7 64ビットで実行され、x86プラットフォームでデバッグされます。


1
それらはあなたのスレッドですか?もしそうなら、あなたは彼らが終わることを期待しませんか?
SLaks '13 / 09/13

回答:


137

これはデバッグメッセージです。これをオフにするには、出力ウィンドウを右クリックしてチェックを外しThread Exit Messagesます。

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

アプリケーションからのプログラム出力に加えて、出力ウィンドウには次の情報を表示できます。

  • デバッガーがロードまたはアンロードしたモジュール。

  • スローされる例外。

  • 終了するプロセス。

  • 存在するスレッド。


10

まあ、アプリケーションは多くのスレッドを並行して実行しているかもしれません。いくつかはあなた、コーダーによって実行され、いくつかはフレームワーククラスによって実行されます(特にGUI環境にいる場合)。

スレッドは、そのタスクを完了すると、終了して存在を停止します。つまり、これには何も心配することはなく、気にしないでください。


私が議論したスレッドは私のものではありません(または私のアプリケーションに属していません)。ただし、私のアプリケーションは、大量の無効なプロセスを返すLinux AIXサーバーに接続する必要があります。このサーバーが機能すること(およびそのタスク)について明確な考えはありませんが、前述のスレッドがサーバーの動作に影響を与える可能性があると思います。
Gionata 2012

まあ、スレッドは実際にアプリケーションに影響を与えるかもしれませんが、表示されるメッセージは、スレッドが正常に終了したことを示しています。したがって、なぜそれらが実行されるのかを試してみることもできます([デバッグ]メニュー=> [ウィンドウ] => [スレッド])。しかし、これは正常です。
Kek

それらは正常に終了しますが、Linuxサーバーの無効なプロセスは、.netフレームワークスレッドの副作用である可能性があります。たぶん、アプリケーションのマルチスレッド実装でさまざまなプログラミングエラーが発生する可能性があります。出来ますか?
Gionata 2012

知りません。このlinuwサーバーは.NETを実行していますか?Monoを使用していますか?実際にあなたの問題は何ですか?消滅したプロセス?
Kek

はい、dufunctプロセスはLinuxサーバーをクラッシュさせます。
Gionata 2012

7

BlueMの承認済み回答を完了するために、ここで非アクティブ化できます。

ツール>オプション>デバッグ>一般出力設定>スレッド終了メッセージ:オフ


4
BlueMの受け入れられた答えは、実際にはより単純な解決策を持っています。「出力ウィンドウを右クリックしてスレッド終了メッセージのチェックを外すと、オフに切り替えることができます」
SimonMᶜKenzieJul

5

アプリケーションが直接または間接的にスレッドを使用する場合(つまり、サードパーティのライブラリのように舞台裏で)、スレッドが完了した後にスレッドを終了させることは絶対に一般的です...基本的にはあなたが説明するとおりです...デバッガーはこのメッセージを表示します...不要な場合にこのメッセージを表示しないようにデバッガーを構成できます...

上記の方法で問題が解決しない場合は、具体的にどのような問題に直面しているかわからないため、詳細をお知らせください...


1

フレームワークは、作成した各ウィンドウをサポートするスレッドを作成します。たとえば、Formを作成し、それを.Show()する場合と同様です。ウィンドウが閉じると、スレッドは終了します(つまり、スレッドは終了します)。

これは正常な動作です。ただし、アプリケーションがスレッドを作成していて、これらのスレッドに対応するスレッド終了メッセージがたくさんある場合(アプリでスレッドに異なる名前を付けると、スレッドの名前でわかる場合があります)、おそらくこれは問題を示しています。プログラムロジックエラーが原因で、アプリがスレッドを作成する必要がないときにスレッドを作成します。

元の投稿者にサーバーのクラッシュの問題に関して何を発見したかを知らせてくれるのは興味深いフォローアップでしょう。これには何の関係もないような気がしますが…投稿された情報からはわかりにくいです。


1

Linqクエリを実行すると、追加のスレッドが生成される可能性があります。即時ウィンドウでLinqクエリコレクションを使用するコードを実行しようとすると、デバッガーで使用できるスレッドが不足しているため、実行が拒否されることがよくあります。

他の人が言ったように、スレッドが終了したときに終了することは完全に正常です。


0

私もこの問題に直面しており、解決策は次のとおりです。

  1. ソリューションを開く
  2. Program.csファイルをダブルクリックします

このコードを再度追加したところ、プログラムは正確に実行されました。

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.