2016-09-07 12 views
2

タイトルとして、私のサーバでスレッドを5つ以上実行すると、私のVB.NETアプリケーションがクラッシュします。5つ以上のスレッドを開始すると、VB.NETアプリケーションがクラッシュする

私は6スレッド宣言している、のは、言ってみましょう:私はスタートコードの部分に到達するたびに

Thread1.Start() 
Thread2.Start() 
Thread3.Start() 
Thread4.Start() 
Thread5.Start() 

Dim Thread1 As New Threading.Thread(AddressOf NoParametersSub1) 
Dim Thread2 As New Threading.Thread(AddressOf NoParametersSub2) 
Dim Thread3 As New Threading.Thread(AddressOf NoParametersSub3) 
Dim Thread4 As New Threading.Thread(AddressOf NoParametersSub4) 
Dim Thread5 As New Threading.Thread(AddressOf NoParametersSub5) 
Dim Thread6 As New Threading.Thread(AddressOf NoParametersSub6) 

その後、私は最初の5つのスレッドを開始し、それが正常に動作します第六スレッド:

Thread6.Start() 

言って、アプリケーションのクラッシュ「(アセンブリ名)は動作を停止しました」。

それは関係なく、私は例えば、try/catchブロックを置くクラッシュ:

Try 
    Thread6.Start() 
Catch ex As Exception 
    MsgBox(ex.Message) 
End Try 

か:

Try 
    Thread6.Start() 
Catch ex As Exception 
End Try 

をそれだけでクラッシュします。 詳しいクラッシュ情報でわかるように、例外は "System.InvalidOperationException"です。

私はここで見ることができるように:https://msdn.microsoft.com/it-it/library/fd85b3df.aspx それは言う:オブジェクトの状態が メソッド呼び出しをサポートすることができないとき オブジェクトのメソッドが呼び出されたときに

アンのSystem.InvalidOperationExceptionがスローされます。

だから私はその後、私は再び試みたが、それはまだクラッシュ(私は推測?)正しく初期化するためのスレッドを待つために

System.Threading.Thread.Sleep(10000) 

を入れています。 そして私はこれを読んで:

方法がメインまたはUIスレッドではないスレッドから UIを操作しようとしたとき、例外もスローされます。

しかし、私は残念なことにUIを操作しようとしていません。そして、ここで

https://msdn.microsoft.com/it-it/library/6x4c42hc(v=vs.110).aspx

と、InvalidOperationException:

このスレッドではなく ParameterizedThreadStartデリゲートのThreadStartデリゲートを使用して作成されました。

私は、スレッド内のパラメータは必要ありませんが、私はとにかく試してみました:

Thread6.Start(New Object() {}) 

それはまだクラッシュします。クラッシュプロセスの

例:

問題の署名:

問題イベント名:CLR20r3

問題の署名01:ProcessControlTest.exe

問題の署名02:1.0.0.0

問題署名03:57cfbaee

問題の署名04:システム

問題の署名05:4.0.30319.34003

問題の署名06:522ec39f

問題の署名07:3083

問題の署名08:

2F

問題シグネチャ09:System.InvalidOperationException

OSバージョン:6.3.9600.2.0.0.272.7

ロケールID:1033

追加情報1:5861

追加情報2:5861822e1919d7c014bbb064c64908b2

追加情報3:bb02

追加情報4:bb02c3b29c3f075104f1d0629e885cfc

サーバーにはWindows Server 2012 R2がインストールされています。アプリケーションは.NET Framework 4.5.2を使用してコンパイルされており、12コアと4 GBがプロセスに割り当てられています(合計32 GBのRAMがあります)。

私のサーバーでWindows Frameworkが壊れているようです。

ありがとうございました。

編集:どんなにNoParametersSub6に何が含まれているか、プログラムがいる限り、私はthread.Start(周りにtryキャッチラッピング6つのスレッド

+3

ここで最も基本的な問題は、プログラムがクラッシュする場所がまったくわからないことです。それはあなたが思うところではない**です**。すべての.NETプログラマは、最終的にAppDomain.CurrentDomain.UnhandledExceptionイベントのイベントハンドラを記述することは、実際にはオプションではないことを発見します。あなたは、プログラムがデバッガの手の届かなくなった後に事故を診断することができるようにする必要があります。 DebugDiagユーティリティは別の方法ですが、ユーザーが簡単な問題を解決するのに役立つわけではありません。 –

+0

NoParametersSub6が何を含んでいても、6スレッドを開始する限り、プログラムはクラッシュします。 – Melody

答えて

0

固定

.NET Frameworkがサーバーで壊れていました。 .NET Frameworkを修復する必要がありました。https://support.microsoft.com/en-us/kb/2698555

これは今のところ魅力的です。

高速化はを修正:\ WINDOWS \ Microsoft.NET \ Frameworkの\ [バージョン]は\をSETTINGS のmachine.configという名前のファイルを削除し、machine.config.defaultの名前を変更します。Cに行きますmachine.config、システムを再起動すると正常に動作します。

0

)があなたを助けにはなりません始めるとクラッシュしていません。 NoParametersSub6メソッドから例外がスローされています。どのスレッドでも未処理の例外が発生すると、アプリケーションがクラッシュします。あなたはすべてのスレッド開始の正常な終了を扱うログ+エラーのいくつかの並べ替えを持っている必要があり、いくつかのログ

Private Sub NoParametersSub6() 
    Try 
     '... my stuff 
    Catch ex As Exception 
     MessageBox.Show("Thread Terminating:" & ex.ToString()) 
    End Try 
End Sub 

であなたのサブでのtry/catchを入れてください。さらに、Hans Prassantは、あなたが折り返しに失敗した状況をキャッチするためにAppDomain.CurrentDomain.UnhandledExceptionを処理する必要があると述べています。

+0

NoParametersSub6が何を含んでいても、6スレッドを開始する限り、プログラムはクラッシュします。 – Melody

+0

スレッド6で何をしていても、別のスレッドで問題を引き起こしている可能性があります。したがって、なぜすべてのスレッドでエラー処理を行い、 'AppDomain.CurrentDomain.UnhandledException'イベントハンドラにログインする必要があります。あなたがロギングするまで、あなたは盲目に飛んでいるので、私たちもそうです。 – FloatingKiwi

+0

私は自分自身を繰り返す必要があります:NoParametersSub6が何を含んでいても、6スレッドを開始する限り、プログラムはクラッシュします。空のSubであっても、6番目のスレッドを開始しようとする限り、クラッシュします。 – Melody

関連する問題