問題タブ [threadabortexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
10673 参照

c# - ReportDocument.ExportToHttpResponseでSystem.Threading.ThreadAbortExceptionをキャッチしないTry/Catch

ExportToHttpResponse次のように使用してCrystalReportDocumentをエクスポートしようとしています。

これを最初に実行しようとしたときに、を受け取りましたSystem.Threading.ThreadAbortExceptionこの質問ExportToHttpResponseでこれが既知のエラーである方法について読んだ後、次のように、ステートメントをtry/catchブロックでラップするという推奨される回避策を実装してみました。

私が理解しているように、これはエラーをキャッチして無視し、続行する必要があります。しかし、私はまだSystem.Threading.ThreadAbortExceptioncatchステートメントの最後の括弧を取得しています。私の質問は、どうやらそれをキャッチしているのに例外がまだ受信されているのはなぜですか、そして例外が無視されるようにそれを修正するにはどうすればよいですか?

0 投票する
1 に答える
233 参照

c# - リモート接続を実行しているスレッドは中止されません

サーバーの1つが稼働していることを確認することを目的とした小さなプログラムを設計しています。場合によっては、サーバーが応答せず、スクリプトを起動してサーバーを再起動する必要があります。

最初に、情報を取得する役割を担う新しいスレッドを開始します。その後、特定の期間、メイン スレッドが参加します。次に、スレッドを中止して切断し、最後にスレッドに参加して、キャッチを実行し、最後にブロックするのに十分な時間を残します。

理論的にはうまくいくはずです: タイムスパンが十分に短い場合、実際にサーバーがダウンしていることを示します (割り当てられた短いタイムスパンで接続を確立できなかったため)。しかし、場合によっては、サーバーが実際にダウンしている場合でも、ThreadAbortException が何の効果もなかったかのように、プログラムは実行を続けます。問題は、これらのダウンタイムが非常に散発的であるため、自分でデバッグして何が正しく機能していないかを確認できなかったことです。

方法は次のとおりです。

これは、ワーカー スレッドを呼び出すメイン スレッドです。非常に簡単です。

呼び出されたスレッドは次のとおりです。

Commands、serviceProgID などの変数は別の場所で宣言されており、適切に機能することがわかっています。私の問題は、ストップウォッチの宣言/初期化に続く3行に及ぶと思います。まず、同様のアプリケーションからこれらの行をコピーして貼り付けたと言わざるを得ませんが、基本的には、指定されたコマンドから結果のみをフェッチする必要があります。残念ながら危機的状況でデバッグできなかったので、どの行が問題なのかはわかりませんが、とにかく ThreadAbortException は効果がないようです。コードがアンマネージドに切り替えられたためですか?

私はここで迷子になっているので、どんなアイデアでも歓迎します! ありがとう!

0 投票する
1 に答える
155 参照

.net - フォームが閉じているときにthread.Abort()を呼び出しても大丈夫ですか?そうでない場合は、グローバルフラグで十分でしょうか?

まず第一に、Thread.Abort()は悪です-わかりました!それでは、私の状況を説明しましょう...

状況:

現在の実行ステータスのみをユーザーに表示するダッシュボードがあります。SQL Server DBに対してさまざまな選択クエリを実行し、最終的にダッシュボードにユーザーに表示されるいくつかの計算を実行します。ユーザーは同時に複数のダッシュボードを開くことができます。ダッシュボードを数秒ごとに更新するタイマースレッドがあります。そのタイマースレッドは別のスレッドを生成し(実際にはキューはスレッドプールで機能します)、長時間実行される計算/クエリを実行します。

問題:

ユーザーがXをクリックしてダッシュボードウィンドウを閉じるときは、すぐにシャットダウンする必要があります(たとえば、1秒以内に2秒は長すぎると思います)。だから私はこのコードを使用します:

問題は、ThreadAbortExceptionがキャッチされる場合と、キャッチされない場合があります。クエリを実行している最中は、ほとんどキャッチされていません。

[更新] innerexceptionをチェックすると、ThreadAbortExceptionをキャッチできることを最近発見しました。

質問:

  1. この場合、Thread.Abort()を使用しても大丈夫ですか?その場合、フォームを閉じたときにユーザーに表示されないように、常にThreadAbortExceptionをキャッチするにはどうすればよいですか?(私が読んだことから、これは可能ではないと思います)
  2. Thread.Abort()を使用しても問題がない場合(これはほとんどの人が答えると思います)、「グローバルブールフラグ」を使用してスレッドにシャットダウンするタイミングを指示することに関するその他の懸念事項があります。
    • スレッドが1秒の制限時間内に停止しないのではないかと心配しています。(たとえば、実行に1〜2秒かかるクエリがある場合があります)
    • if(shouldShutdown)ステートメントでコードを乱雑にする必要があります。
    • すべてのクラスが使用できるように、shouldShutdownフラグを静的にする必要がありますか?ユーザーが複数のダッシュボードを同時に開くことができる場合、これは問題になりますか?(静的変数がすべてのダッシュボードで共有されることを懸念しています。これは絶対に必要ありません。)
    • ワーカースレッドがシャットダウンする必要があることを確認したら、例外をスローする必要がありますか、それとも単に戻る必要がありますか?それらがちょうど戻った場合、一部の関数がfalseを返しても問題ないため、if(shouldShutdown)チェックをさらに追加する必要があります。例外をスローしても問題がない場合、どの例外をお勧めしますか?カスタムのもの?

ありがとう

0 投票する
1 に答える
7071 参照

.net - LegacyUnhandledExceptionPolicy では、ThreadAbortException をキャッチ (および飲み込み) することはできませんか?

未処理の例外処理に .NET 1.1 互換モードを使用しています。問題は、LegacyUnhandledExceptionPolicy が「1」に設定されている場合 (これが必要です)、ThreadAbortException をキャッチして飲み込めないことです。

コード例:

App.config:

コード:

従来の例外処理が "0" (OFF) の場合、上記のコードは予想どおり ThreadAbortException を静かに飲み込みます。

しかし、従来の例外処理が「1」の場合、上記のコードは ThreadAbortException をコンソールに出力しますが、これは私が期待するものではありません。

何か案は?

ありがとう。

0 投票する
2 に答える
3575 参照

c++ - エラー: 終了が呼び出され、例外をスローしましたAbort トラップ: 6

継承を扱うホットポテトゲームを作っています。私はポテトクラス、プレーヤークラス、審判クラスを持っています。

私の審判クラス内でトス関数を呼び出すと、私はこの同じエラーを取得し続け、理由を理解できないようです。

私が調べたところ、umpire::start() 内で、for ループ内の Players.at(randU)->toss(*m) への呼び出しがこのエラーを引き起こしていることがわかりました。しかし、私にはすべてがうまく見えます。

誰でも私を助けることができますか?ありがとう!

Umpire.cc

Player.cc

メイン.cc

また、注意: PRNG.h は、乱数を生成するクラスです。PRNG prng1; int rand=prng1(#) は、0 から # までの乱数を生成します。

また: toss 関数を呼び出すと問題が発生します。Players.at(randU)->getID() を呼び出そうとしても、エラーがまったく発生しないため、範囲外ではありません。そのプレイヤーのトス機能に到達できないのでしょうか?私が指している何かまたは記憶に関係していると思います。まず、main.cc で PlayerList プレーヤーを作成し、push_back プレーヤーを 2 つに交互に作成します。しかし、各プレイヤーはリストも受け取ります。多分私はこれに関連するエラーに遭遇していますか?

ありがとう!どんな助けでも大歓迎です:)

0 投票する
0 に答える
1544 参照

c# - 逆シリアル化中にスレッドが中止されたというエラーが発生しました (ただし、中止されませんでした)

非常に奇妙なエラーです。基本的に、ユーザーがアプリにログインすると、次のコード スニペットを使用して xml ファイルからデータをロードするスレッドを起動します。

ロードしている XML ファイルは約 3MB です。この例外を除いて、特定のファイルで失敗するたびに:

Deserialize 'C:\bin\Debug\Settings\Objects.xml': System.Threading.ThreadAbortException: スレッドが中止されました。

System.RuntimeMethodHandle.InvokeMethod (オブジェクト ターゲット、オブジェクト [] 引数、署名 sig、ブール コンストラクター) で

System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (オブジェクト obj、オブジェクト [] パラメーター、オブジェクト [] 引数) で

System.Reflection.RuntimeMethodInfo.Invoke (オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] パラメーター、CultureInfo カルチャ) で System.Xml.Serialization.TempAssembly.InvokeReader (XmlMapping マッピング、XmlReader xmlReader、XmlDeserializationEvents イベント、文字列 encodingStyle) でSystem.Xml.Serialization.XmlSerializer.Deserialize(ストリーム ストリーム)

c:\Classes\XmlSerializer.cs:line 82 の Classes.XmlSerializer.Deserialize[T](String Path) で以前のデータを読み込めません! System.Threading.ThreadAbortException: スレッドが中止されました。

Classes.XmlSerializer.Deserialize[T](String Path) (c:\Classes\XmlSerializer.cs:line 96) at Controllers.ObjectDataCollection.ObjectThread.LoadData() in c:\Controllers\ObjectDataCollection.cs:line 74

これをさらにデバッグする方法について、私は完全に途方に暮れています。試行された逆シリアル化の後の次の行は、物事をスキャンするループであり、完全に正常に実行されるため、スレッドが中止されていないことを私は知っています (スレッドは再起動されず、1 か所で開始されただけです)。

これをさらにデバッグする方法について誰か考えがありますか? 私はここで完全に途方に暮れています。ここにすべてのコードがあります: http://pastebin.com/F30vD9KL

0 投票する
1 に答える
1365 参照

c# - async-await 使用時の Moq.Verify での ThreadAborted

私のテスト方法。xUnitを使用しています

この行は常に ThreadAborted 例外をスローします。

しかし、テストをデバッグすると、正常に実行されます。私はスレッドが完全に返された結果を返していないことを考えていますが、私は await! を使用しています。

出力ウィンドウ:

0 投票する
1 に答える
359 参照

c# - Response.End() の使用コスト

次のコードを使用してファイルをダウンロードしていますが、Response.End常にException. これは、アプリケーションの動作に対するコストですか? はいの場合、ファイルをダウンロードする別の方法を取得するにはどうすればよいですか。例外を処理するために使用しようとしましThread.ResetAbort()たが、この結果、不要な追加データがファイルに追加されます