2011-01-17 21 views
3

スレッドがたくさんあるマルチスレッドのC#「コンソール」アプリケーションがあります。すべてのスレッドが終了します。アプリケーションが正常に終了する時間の90%。しかし、アプリケーションのコピーが残っている時間の10%は残っています:コンソールはまだ開いています。すべてのスレッドが終了した後にC#プロセスが残っている

私はVisual Studio 2010でこれに接続し、中断するためにbreakを使用し、2つの「空の」スタックフレームを表示します.1つはメイン用、もう1つはアプリケーション作成スレッド用です。どちらもスタック上に何もありません。 Visual Studioでは、これらのスレッドのいずれかをクリックすると「ソースコードはスレッドで使用できません」というメッセージが表示され、「dissambled code view」リンクが表示されます。私はそれをクリックして、 "逆アセンブリコードはこのスレッドで利用できません"と言う。

私が間違っていると思われるアイデアはありますか?

+1

デバッガオプションで[マイコードだけを無効にして、もう一度やり直してください。 – SLaks

+0

Environment.Exitを呼び出して明示的にプロセスを終了していますか? –

+0

これは私がすでに持っていた問題のようですが、私の場合はデバッグを一時停止する方法がありませんでした! + Fav。ところで、すべてのスレッドを正しくフォークして結合しますか?保留中のスレッドのスタックトレースをマネージコードまで調べることはできますか?たとえば、セマフォー内でスレッドがブロックされている可能性があります。セマフォーは部分的には管理されていません。 –

答えて

2

何分か後にシャットダウンしますか?一部の.netヘルパーのTheadまたはガベージコレクションスレッドがまだ実行されている可能性があります。それにはもう少し時間がかかるかもしれません。

デバッグビルドまたはリリースビルドを実行していますが、プロセスが設計目的で実行されているビジュアルスタジオホストプロセスの1つではありませんか。

+0

良い質問です。私はそれを確認します。私の問題を説明することができます。 –

+1

Barfieldmv、あなたはそれが正しいと思います。私のスレッドのほとんどはそれらを閉鎖する例外をキャッチしていましたが、1つは不明な "IsisShutdown"例外をスローしていました。スレッドスタックは巻き戻され、Windowsは例外をどうしたらいいのか分からず、2つの "空の"スレッドでこの奇妙な状態になってしまいます。それは例外を報告しなかったが、それを捕まえると問題は発生しないようだ。基本的に競争状態のために10%の時間がかかる。ありがとう! –

関連する問題