これを行うと、スタックトレースが保持されないため、不適切な形式になります。
try { /*... some code that can throw an exception ...*/ }
catch (Exception e)
{
throw e; // ...Use "throw;" by itself instead
}
ただし、例外がUI以外のスレッドでキャッチされた場合は、UIに戻して処理し、ユーザーが次のようなメッセージを受け取るようにします。
try { /*... some code that can throw an exception ...*/ }
catch (Exception e)
{
Dispatcher.Invoke((Action)(() => { throw; }));
}
ただし、C#レクサーは(正しく) throwステートメントがcatchの内部にあるとは見なさないため、ここではthrowキーワードを単独で使用することはできません。私は代わりにやらなければなりません:
try { /*... some code that can throw an exception ...*/ }
catch (Exception e)
{
Dispatcher.Invoke((Action)(() => { throw e; }));
}
例外を再スローすると、スタックトレースが失われます。
これを回避する(簡単な)方法はありますか(例外がスレッドを切り替える準備ができたときにスタックトレースをいつでもパッケージ化できますが、それは厄介なようです)?
注:このスレッドを見ましたが、タイトルのみが類似しており、内容は類似していません。