次の方法で共有


ThreadExceptionEventArgs クラス

ThreadException イベントのデータを提供します。

この型のすべてのメンバの一覧については、ThreadExceptionEventArgs メンバ を参照してください。

System.Object
   System.EventArgs
      System.Threading.ThreadExceptionEventArgs

Public Class ThreadExceptionEventArgs
   Inherits EventArgs
[C#]
public class ThreadExceptionEventArgs : EventArgs
[C++]
public __gc class ThreadExceptionEventArgs : public EventArgs
[JScript]
public class ThreadExceptionEventArgs extends EventArgs

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

ThreadExceptionEventArgs は、処理されない例外が発生したときにスレッドによって作成されます。 ThreadExceptionEventArgs は、発生した Exception を保持します。

使用例

[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 code to create a form with a button.
    
    ' Programs the button to throw the exception when clicked.
    Private Sub button1_Click(sender As Object, e As System.EventArgs)
        Throw New ArgumentException("The parameter was invalid")
    End Sub
    
    Public Shared Sub Main()
        ' Creates an instance of the methods that will handle the exception.
        Dim eh As New CustomExceptionHandler()
        
        ' Adds the event handler to 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.
Friend Class CustomExceptionHandler
    
    'Handles the exception event
    Public Sub OnThreadException(sender As Object, t As ThreadExceptionEventArgs)
        Dim result As DialogResult = 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 = DialogResult.Abort Then
            Application.Exit()
        End If
    End Sub
     
    ' Creates the error message and display it.
    Private Function ShowThreadExceptionDialog(e As Exception) As DialogResult
        Dim errorMsg As String = "An error occurred please contact the " & _
            "adminstrator with the following information:" & _
            Microsoft.VisualBasic.ControlChars.Cr & _
            Microsoft.VisualBasic.ControlChars.Cr
        errorMsg &= e.Message & Microsoft.VisualBasic.ControlChars.Cr & _
            Microsoft.VisualBasic.ControlChars.Cr & "Stack Trace:" & _
            Microsoft.VisualBasic.ControlChars.Cr & e.StackTrace
        Return MessageBox.Show(errorMsg, "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 code to create a form with a button.
 
    // Programs the button to throw the 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 display 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 handle the exception event.
private __gc class CustomExceptionHandler {

    //Handles the exception event
public:
    void OnThreadException(Object* /*sender*/, ThreadExceptionEventArgs* t) 
    {
        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 display it.
private:
    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);
    }
};

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

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

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

 int 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, &CustomExceptionHandler::OnThreadException);

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

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

必要条件

名前空間: System.Threading

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

アセンブリ: System (System.dll 内)

参照

ThreadExceptionEventArgs メンバ | System.Threading 名前空間 | Thread | ThreadStart | ThreadExceptionEventHandler