0

私のマルチスレッドサーバーでは、次のコードを使用しています(フォーム自体またはコースを実行する前に)

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomainUnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(ApplicationThreadException);

呼び出されたメソッドはリストに例外を書き込むので、簡単に修正できます。しかし、今日来て、VSがスローNullReference exceptionされたのを見ましたが、なぜキャッチされなかったのかわかりませんか?

次のように呼び出すことで再現できます。

stream = null;
stream.Flush();

プログラムは例外をキャッチするスコープにジャンプしますが、フラッシュ行にとどまります..奇妙な. 他の例外は適切に処理されます。このメソッドがまだ実装されていないためでしょうか?

"Object reference not set to an instance of object"「例外」リストに表示されていると確信しており、プログラムは続行されました。この特定の例外がキャッチされないのはなぜですか?

4

2 に答える 2

0

次のコードを使用すると、うまく機能することがわかります。-

namespace YourNamespace
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException((Exception)e.ExceptionObject);
        }

        static void HandleException(Exception e)
        {
            //Handle exception
        }

    }
}

ありがとう、

フィル http://exceptioneer.com

于 2009-11-19T12:27:15.280 に答える
0

あなたの質問に答えるには、スローされたエラーに関する詳細情報が必要です。それはあなたのコードに由来していますか?スタックトレースを見てみましょう。

また、ThreadException を設定する前に Application.Run(...) を呼び出すと、例外はキャッチされません。

于 2009-10-24T18:37:56.600 に答える