Freigeben über


Application.ThreadException-Ereignis

Tritt beim Auslösen einer nicht abgefangenen Threadausnahme ein.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Public Shared Event ThreadException As ThreadExceptionEventHandler
'Usage
Dim handler As ThreadExceptionEventHandler

AddHandler Application.ThreadException, handler
public static event ThreadExceptionEventHandler ThreadException
public:
static event ThreadExceptionEventHandler^ ThreadException {
    void add (ThreadExceptionEventHandler^ value);
    void remove (ThreadExceptionEventHandler^ value);
}
/** @event */
public static void add_ThreadException (ThreadExceptionEventHandler value)

/** @event */
public static void remove_ThreadException (ThreadExceptionEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Hinweise

Dieses Ereignis ermöglicht der Windows Forms-Anwendung die Behandlung von andernfalls nicht behandelten Ausnahmen. Fügen Sie Ihre Ereignishandler an das ThreadException-Ereignis an, um diese Ausnahmen zu behandeln, die die Anwendung in einen unbekannten Zustand versetzen. Wenn möglich, sollten Ausnahmen in einem strukturierten Ausnahmebehandlungsblock behandelt werden.

Beispiel

Im folgenden Codebeispiel wird ein ThreadException-Ereignis ausgelöst, wenn in dem Formular auf button1 geklickt wird. Im Beispiel werden zwei Klassen erstellt. Die ErrorHandler-Klasse erstellt das Formular und die Schaltfläche, die das Ereignis auslöst. Die CustomExceptionHandler-Klasse stellt die Methoden zur Verfügung, um die Ausnahme zu behandeln.

In der ErrorHandler-Klasse wird in Main eine neue Instanz der Klasse für die Ausnahmebehandlung, d. h. eine Instanz von CustomExceptionHandler, erstellt. Die Instanz wird dann dem Ereignis hinzugefügt, und die Anwendung wird ausgeführt.

In der OnThreadException-Methode der CustomExceptionHandler-Klasse wird im Beispiel eine try...catch...finally-Anweisung verwendet, um die Ausnahme zu verarbeiten. Die ShowThreadExceptionDialog-Methode erstellt die anzuzeigende Meldung und stellt diese in einem Meldungsfeld dar.

' 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
// 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);
    }
 }
   // Creates a class to throw the error.
public:
   ref 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 gcnew ArgumentException( "The parameter was invalid" );
      }

   public:
      static void Main()
      {
         // Creates an instance of the methods that will handle the exception.
         CustomExceptionHandler ^ eh = gcnew CustomExceptionHandler;
         
         // Adds the event handler to to the event.
         Application::ThreadException += gcnew ThreadExceptionEventHandler( eh, &Form1::CustomExceptionHandler::OnThreadException );
         
         // Runs the application.
         Application::Run( gcnew ErrorHandler );
      }
   };

   // Creates a class to handle the exception event.
internal:
   ref 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( "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:
      System::Windows::Forms::DialogResult ShowThreadExceptionDialog( Exception^ e )
      {
         String^ errorMsg = "An error occurred please contact the adminstrator with the following information:\n\n";
         errorMsg = String::Concat( errorMsg, e->Message, "\n\nStack Trace:\n", e->StackTrace );
         return MessageBox::Show( errorMsg, "Application Error", MessageBoxButtons::AbortRetryIgnore, MessageBoxIcon::Stop );
      }
   };
// Creates a class to throw the error.
public static class ErrorHandler extends 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");
    } //button1_Click

    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.add_ThreadException(
            new ThreadExceptionEventHandler(eh.OnThreadException));

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

// Creates a class to handle the exception event.
static class CustomExceptionHandler
{
    // Handles the exception event.
    public void OnThreadException(Object sender, ThreadExceptionEventArgs t)
    {
        DialogResult result = DialogResult.Cancel;
        try {
            result = this.ShowThreadExceptionDialog(t.get_Exception());
        }
        catch (System.Exception exp) {
            try {
                MessageBox.Show("Fatal Error", "Fatal Error", 
                    MessageBoxButtons.AbortRetryIgnore, 
                    MessageBoxIcon.Stop);
            }
            finally {
                Application.Exit();
            }
        }

        // Exits the program when the user clicks Abort.
        if (result.Equals(DialogResult.Abort)) {
            Application.Exit();
        }
    } //OnThreadException

    // Creates the error message and displays it.
    private DialogResult ShowThreadExceptionDialog(System.Exception e)
    {
        String errorMsg = "An error occurred please contact the"
            + " administrator with the following information:\n\n";
        errorMsg = errorMsg + e.get_Message() + "\n\nStack Trace:\n"
            + e.get_StackTrace();
        return MessageBox.Show(errorMsg, "Application Error",
            MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
    } //ShowThreadExceptionDialog
} //CustomExceptionHandler

public static void main(String[] args)
{
    ErrorHandler.main(args);
}//main

.NET Framework-Sicherheit

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

Application-Klasse
Application-Member
System.Windows.Forms-Namespace