2
method A()
{
  try
  {
    Thread t = new Thread(new ThreadStart(B));
    t.Start();
  }
  catch(exception e)
  {
    //show message of exception
  }      

}

method B()
{
 // getDBQuery
}

B の例外ですが、キャッチされません。.netで合法ですか?

4

2 に答える 2

7

正しい、スレッドからの例外は呼び出し元に転送されません。スレッドはこれを単独で処理する必要があります。

最も一般的な答えは、ここでは (裸の) スレッドを使用すべきではないということです。それは効率的ではなく、便利ではありません。

Taskを使用すると、例外が保存され、calWait()またはを呼び出すときに発生しますResult

于 2013-11-04T14:59:37.833 に答える
4

A実行が終了しBても、独立したスレッド上でそのまま実行されている可能性があります。そのため、原則として、発生するAすべての例外をキャッチすることはできませんB

try-catch を の中に移動しBます。クラスはThread例外を転送しません。

さらに良いTaskことに、例外の伝播と検査を可能にする which を使用してください。

于 2013-11-04T14:59:44.087 に答える