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