4

以下の例は、私の問題を単純化したものです。新しいスレッド内で例外がスローされます。スレッド内でこれを処理しないと、外側の try/catch によってキャッチされず、アプリケーションがクラッシュします。

発生した例外を確実にキャッチする方法はありますか。

        try
        {
            new Thread(delegate()
                {
                    throw new Exception("Bleh"); // <--- This is not caught

                }).Start();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
4

4 に答える 4

1

AppDomain.UnhandledExceptionApplication.ThreadExceptionまたはDispatcher.UnhandledExceptionを使用します。実際のアプリケーションの種類によって異なります。

もう 1 つの可能性は、AOP を使用することです ( PostSharpが思い浮かびます)。ただし、例外をキャッチすることが唯一の目標ではありません。例外の原因を修正する方法を見つける必要があります。バグの場合は、例外が役に立ち、十分なログが記録されます。より高度な理由がある場合は、それについて考えて対策を講じる必要があります。残念ながら、「一般的な解決策」はありません。したがって、事前に例外をキャッチしていない場合、適切に対応できるとは思えません。

于 2013-06-25T13:12:03.703 に答える
0

私の理解では、.Net では 2 つのスレッド間の通信が許可されていません。スレッドは互いに分離されているためです。これは簡単な方法で達成できますが、それがどれだけあなたに合っているかわかりません。役に立つ場合は、答えをマークしてください。

public  Exception exception;

private void button1_Click(object sender, EventArgs e)
{
        try
        {
            new Thread(delegate()
            {
                try
                {
                    throw new Exception("Bleh"); // <--- This is not caught
                }
                catch (Exception e)
                {
                    exception = e;
                }

            }).Start();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

        if (exception != null)
        {
            //your code here
        }

    }
于 2013-06-25T13:55:47.617 に答える