問題タブ [unobserved-exception]

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 投票する
3 に答える
990 参照

wpf - WPF の非 UI スレッドのキャッチオール例外ハンドラー

具体的には、MVVM で WPF を使用しています。これは、すべてのアクションが発生する WPF ウィンドウです。プロパティ、コマンドなどに対応するビュー モデル クラスを使用します。

次のように、Application.xaml.vb StartUp でメイン UI スレッドと非 UI スレッドの例外ハンドラーを設定しました。

この部分は動作します

これをテストしようとすると、意図的に例外をスローして動作します。[すべて選択] ボタンのクリックを処理するのは、実際には Sub の View Model にあります。

ボタン:

正常にキャッチされた例外をスローしているコマンド:

この部分は機能しません

同じ MainWindow に、同様にコマンドにバインドされた別のボタンがあります。ただし、タスクを使用してバックグラウンドで作業を実行し、そこでスローされた例外はキャッチオール ハンドラーによってキャッチされません。

同様の質問がいくつかありますが、それらから実際に答えを見つけることができませんでした。ほとんどの場合、 AppDomain UnhandledException が答えのようですが、それは私のものではありません。この方法で非 UI スレッドでスローされる可能性のある例外をキャッチできるようにするには、正確に何を追加する必要がありますか?

私がやったこと

Application.xaml.vb でイベント ハンドラーを処理しているときに、TaskScheduler.UnobservedTaskException イベントを取得してイベント ハンドラーを呼び出すことができませんでした。しかし、私は他の答えからヒントを得ました。最終的には役に立ったので、答えとしてマークします。

ただし、これはアプリケーション レベルではないため、これがより大きなアプリケーションである場合は、タスクを使用したすべてのインスタンスでこれを複製する必要があります。これは私が探していたものではありませんでしたが、今はこれ以上時間を費やすつもりはありません。

Taskにtry-catchを配置することになりました。キャッチでは、Dispatcher.Invoke を使用して、ユーザー フレンドリーなダイアログと例外情報を引き続き表示することができました。

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

c# - UnobservedTaskException のロジックが .net 4.5 で変更されたのはなぜですか?

.net 4.5 UnobservedTaskExceptionでわかっているように、アプリはクラッシュしません。

開発者がタスクに基づいて非同期コードを簡単に記述できるようにするために、.NET Framework 4.5 では監視されない例外の既定の例外動作が変更されています。監視されていない例外は依然として UnobservedTaskException 例外を発生させますが、デフォルトではプロセスは終了しません。代わりに、イベント ハンドラーが例外を監視するかどうかに関係なく、イベントの発生後にランタイムによって例外が処理されます。この動作は構成できます。.NET Framework 4.5 以降では、構成要素を使用して .NET Framework 4 の動作に戻し、プロセスを終了できます。

わかりました、Microsoft が例外を処理するマルチスレッドのエクスペリエンスを変更することを決定したと仮定しますが、なぜそれが tpl のみに適用されたのでしょうか? マルチスレッドメカニズムの他の部分が変更されなかったのはなぜですか? たとえば、次のコードでもアプリがクラッシュします

紛らわしく、非常に奇妙に見えます。これについて何か知っている人はいますか?

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

c# - 「ThrowIfCancellationRequested」は TaskScheduler_UnobservedTaskException でキャッチされませんか?

私は非常に奇妙な問題を抱えています.これが私のコードです:

なぜ「UnobservedTaskException」のイベントをキャッチできないのか?GC.Collect() と Thread.Sleep() を使ったのですが、どうにも……?

「Error.txt」が作成されないこともあれば、何もないファイルが作成されることもある……?

ここに画像の説明を入力

【解決済み——提案によると、これが答えです】</p>

1)「キャンセル」を削除して、ここで例外をモックする必要があることに注意してください。

2)次に、例外をフラット化します(これは集約的な例外であるため):

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

c# - dotnetcoreapp2.0 での UnobservedTaskException ハンドラーの使用

次のコードは、netcoreapp2.0 アプリケーションで実行すると、最終的にスローされないようです。UnobservedTaskException

プロジェクトファイルはこちら。UnobservedTaskExceptionハンドラーを解雇するにはどうすればよいですか?

他のスタックオーバーフローの投稿で、プロジェクト ファイルで次のスニペットを使用するようにというアドバイスを見たことがありますが、これは .net Framework 4.0 以降のプロジェクトでのみ機能します。.netcore プロジェクト ファイルに相当するものがあれば、それを知る必要があるかもしれません。