次の方法で共有


Application.ThreadException イベント

トラップされないスレッドの例外がスローされると、発生します。

Public Shared Event ThreadException As ThreadExceptionEventHandler
[C#]
public static event ThreadExceptionEventHandler ThreadException;
[C++]
public: static __event ThreadExceptionEventHandler*   ThreadException;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、ThreadExceptionEventArgs 型の引数を受け取りました。次の ThreadExceptionEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
Exception 発生した Exception を取得します。

解説

このイベントを使用すると、他の方法では処理されない例外を Windows Forms アプリケーションで処理できます。これらの例外が発生するとアプリケーションは不明な状態に陥るため、これらの例外を処理するには、 ThreadException イベントに適切なイベント ハンドラを結び付けてください。可能であれば、構造化例外処理ブロックで例外を処理するようにしてください。

使用例

[Visual Basic, C#, C++] フォームで button1 をクリックすることによって、 ThreadException イベントを発生させる例を次に示します。この例では、次の 2 つのクラスを作成します。 ErrorHandler クラスは、フォーム、およびイベントを発生させるボタンを作成します。 CustomExceptionHandler クラスは、例外を処理するためのメソッドを提供します。

[Visual Basic, C#, C++] ErrorHandler クラスの Main では、コードが例外処理クラスの新しいインスタンス (CustomExceptionHandler のインスタンス) を作成します。次に、作成されたインスタンスがイベントに追加され、アプリケーションが実行 (Run) されます。

[Visual Basic, C#, C++] この例では、 CustomExceptionHandler クラスの OnThreadException メソッドで、 try...catch...finally ステートメントを使用して例外を処理しています。 ShowThreadExceptionDialog メソッドは、表示するメッセージを作成し、そのメッセージをメッセージ ボックスに表示します。

 
' Creates a class to throw the error.
Public Class ErrorHandler
   Inherits System.Windows.Forms.Form

   ' Inserts the code to create a form with a button.

   ' Programs the button to throw an exception when clicked.
   Private Sub button1_Click(sender As object, e As System.EventArgs)
      Throw New ArgumentException("The parameter was invalid")
   End Sub

   <STAThread()> _
   Shared Sub Main()
      ' Creates an instance of the methods that will handle the exception.
      Dim eh As CustomExceptionHandler = New CustomExceptionHandler()

      ' Adds the event handler to the event.
      AddHandler Application.ThreadException, AddressOf eh.OnThreadException

      ' Runs the application.
      Application.Run(new ErrorHandler())
   End Sub
End Class

' Creates a class to handle the exception event.
Private Class CustomExceptionHandler

   ' Handles the exception event.
   Public Sub OnThreadException(sender As object, t As ThreadExceptionEventArgs) 
      Dim result As DialogResult = System.Windows.Forms.DialogResult.Cancel
      Try
         result = Me.ShowThreadExceptionDialog(t.Exception)
      Catch
         Try
            MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop)
         Finally
            Application.Exit()
         End Try
      End Try

      ' Exits the program when the user clicks Abort.
      If (result = System.Windows.Forms.DialogResult.Abort) Then
         Application.Exit()
      End If
   End Sub

   ' Creates the error message and displays it.
   Private Function ShowThreadExceptionDialog(e As Exception) As DialogResult
      Dim errorMsg As StringWriter = New StringWriter()
      errorMsg.WriteLine("An error occurred please contact the adminstrator with the following information:")
      errorMsg.WriteLine("")
      errorMsg.WriteLine(e.Message)
      errorMsg.WriteLine("")
      errorMsg.WriteLine("Stack Trace:")
      errorMsg.WriteLine(e.StackTrace)
      Return MessageBox.Show(errorMsg.ToString(), "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop)
   End Function
End Class


[C#] 
// Creates a class to throw the error.
 public class ErrorHandler : System.Windows.Forms.Form {
 
    // Inserts the code to create a form with a button.
 
    // Programs the button to throw an exception when clicked.
    private void button1_Click(object sender, System.EventArgs e) {
       throw new ArgumentException("The parameter was invalid");
    }
 
    public static void Main(string[] args) {
       // Creates an instance of the methods that will handle the exception.
       CustomExceptionHandler eh = new CustomExceptionHandler();
 
       // Adds the event handler to to the event.
       Application.ThreadException += new ThreadExceptionEventHandler(eh.OnThreadException);
 
       // Runs the application.
       Application.Run(new ErrorHandler());
    }
 }
 
 // Creates a class to handle the exception event.
 internal class CustomExceptionHandler {
 
    // Handles the exception event.
    public void OnThreadException(object sender, ThreadExceptionEventArgs t) 
    {
       DialogResult result = DialogResult.Cancel;
       try
       {
          result = this.ShowThreadExceptionDialog(t.Exception);
       }
       catch
       {
          try
          {
             MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
          }
          finally
          {
             Application.Exit();
          }
       }

       // Exits the program when the user clicks Abort.
       if (result == DialogResult.Abort) 
          Application.Exit();
    }
 
    // Creates the error message and displays it.
    private DialogResult ShowThreadExceptionDialog(Exception e) {
       string errorMsg = "An error occurred please contact the adminstrator with the following information:\n\n";
       errorMsg = errorMsg + e.Message + "\n\nStack Trace:\n" + e.StackTrace;
       return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
    }
 }


[C++] 
// Creates a class to throw the error.
public:
__gc class ErrorHandler : public System::Windows::Forms::Form {

    // Inserts the code to create a form with a button.

    // Programs the button to throw an exception when clicked.
private:
    void button1_Click(Object* /*sender*/, System::EventArgs* /*e*/) {
        throw new ArgumentException(S"The parameter was invalid");
    }

public:
    static void Main() {
        // Creates an instance of the methods that will handle the exception.
        CustomExceptionHandler* eh = new CustomExceptionHandler();

        // Adds the event handler to to the event.
        Application::ThreadException += new ThreadExceptionEventHandler(eh, &Form1::CustomExceptionHandler::OnThreadException);

        // Runs the application.
        Application::Run(new ErrorHandler());
    }
};

// Creates a class to handle the exception event.
public private:
__gc class CustomExceptionHandler {

    // Handles the exception event.
public:
    void OnThreadException(Object* /*sender*/, ThreadExceptionEventArgs* t)
    {
        System::Windows::Forms::DialogResult result = DialogResult::Cancel;
        try
        {
            result = this->ShowThreadExceptionDialog(t->Exception);
        }
        catch( Exception* )
        {
            try
            {
                MessageBox::Show(S"Fatal Error", S"Fatal Error", MessageBoxButtons::AbortRetryIgnore, MessageBoxIcon::Stop);
            }
            __finally
            {
                Application::Exit();
            }
        }

        // Exits the program when the user clicks Abort.
        if (result == DialogResult::Abort)
            Application::Exit();
    }

    // Creates the error message and displays it.
private:
    System::Windows::Forms::DialogResult ShowThreadExceptionDialog(Exception* e) {
        String* errorMsg = S"An error occurred please contact the adminstrator with the following information:\n\n";
        errorMsg = String::Concat( errorMsg, e->Message, S"\n\nStack Trace:\n", e->StackTrace );
        return MessageBox::Show(errorMsg, S"Application Error", MessageBoxButtons::AbortRetryIgnore, MessageBoxIcon::Stop);
    }
};

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

Application クラス | Application メンバ | System.Windows.Forms 名前空間