0

最も深いレベルでC#の終了スレッドをキャッチする方法はありますか?私は現在持っています:

AppDomain.CurrentDomain.UnhandledException += new System.UnhandledExceptionEventHandler(App_ThreadException);

開始時

~IOThread()
{
    Console.WriteLine(string.Format("IOThread destroyed at: {0}", DateTime.Now));
}

デストラクタ。

a

try
{
    Server.world.Tick();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

失敗したアクセスまたはnull参照をキャッチしてみてください。それでもまだ!何かが原因で処理スレッドが停止していますが、デバッガーでBreakAllを実行すると、処理スレッドがスレッドリストにないため、無限ループではありません。

どんな助けでも大歓迎です、私はこの問題をデバッグすることさえできません。

4

2 に答える 2

0

まず第一に、AppDomain.CurrentDomain.UnhandledExceptionは何も「キャッチ」しません。例外がある場合でも、アプリケーションはクラッシュします。このイベントはそこにあるので、クラッシュする前にいくつかのことを行うことができます。

次に、デストラクタとファイナライザを混同しています。

第三に、別のスレッドで未処理の例外がある場合、アプリケーション全体がクラッシュします。それがクラッシュしない場合-それはただ一つのことを意味することができます-あなたのスレッドは単に動作を終了しました。

于 2013-03-12T05:12:16.853 に答える
0

これを適切に行う唯一の方法は、プログラムで作成するすべてのスレッド (スレッド プールのコールバック メソッドを含む) のルートに catch(Exception) を配置することです。

于 2013-03-12T05:53:28.797 に答える