Freigeben über


Application.OnThreadException-Methode

Löst das ThreadException-Ereignis aus.

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

Syntax

'Declaration
Public Shared Sub OnThreadException ( _
    t As Exception _
)
'Usage
Dim t As Exception

Application.OnThreadException(t)
public static void OnThreadException (
    Exception t
)
public:
static void OnThreadException (
    Exception^ t
)
public static void OnThreadException (
    Exception t
)
public static function OnThreadException (
    t : Exception
)

Parameter

  • t
    Eine Exception, die die ausgelöste Ausnahme darstellt.

Hinweise

Dieses Ereignis ermöglicht es einer Anwendung, eine Ausnahme auf intelligente Weise zu behandeln. Eine Fensterprozedur ruft dieses Ereignis auf, wenn es eine Threadausnahme empfängt. Fügen Sie den Ereignishandler an dieses Ereignis an.

Durch das Auslösen eines Ereignisses wird der Ereignishandler über einen Delegaten aufgerufen. Weitere Informationen finden Sie unter Auslösen eines Ereignisses.

Mit der OnThreadException-Methode können auch abgeleitete Klassen das Ereignis ohne Anfügen eines Delegaten behandeln. Dies ist das bevorzugte Verfahren für die Behandlung des Ereignisses in einer abgeleiteten Klasse.

Hinweis

Die Application-Klasse hat ein ThreadException-Ereignis. Sie können diesem Ereignis einen Ereignishandler anfügen, der die erforderliche benutzerdefinierte Verarbeitung vornimmt.

Hinweise für Erben Wenn Sie OnThreadException in einer abgeleiteten Klasse überschreiben, müssen Sie dieOnThreadException der Basisklasse aufrufen, damit registrierte Delegaten das Ereignis empfangen.

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.

Imports System
Imports System.IO
Imports System.Windows.Forms
Imports System.Threading
Imports System.Drawing

Public Class Form1
    Inherits Form

    ' Inserts code to create a form with a button.
    Private WithEvents Button1 As Button

    Sub New()
        Me.Size = New Size(600, 100)

        Button1 = New Button()
        Button1.Text = "Click Me"
        Button1.Location = New Point(10, 10)
        Me.Controls.Add(Button1)
    End Sub

    ' Programs the button to throw the exception when clicked.
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        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 Form1())
    End Sub
End Class

' Create a class to handle the exception event.
Friend Class CustomExceptionHandler

    ' Handles the exception event.
    Public Sub OnThreadException(ByVal sender As Object, ByVal 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(ByVal 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
using System;
using System.Windows.Forms;
using System.Threading;
using System.Drawing;

public class Form1 : Form
{
    // Inserts code to create a form with a button.
    Button button1;

    private Form1()
    {
        this.Size = new Size(600, 100);

        button1 = new Button();
        button1.Click += new EventHandler(button1_Click);
        button1.Text = "Click Me"; 
        button1.Location = new Point (10, 10);
        this.Controls.Add(button1);
    }
 
    // 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 the event.
       Application.ThreadException += new ThreadExceptionEventHandler(eh.OnThreadException);
 
       // Runs the application.
       Application.Run(new Form1());
    }
 }
 
 // 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);
    }
 }
public:
   // Creates a class to throw the error.
   ref 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 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 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
   {
   public:
      // Handles the exception event.
      void OnThreadException( Object^ /*sender*/, ThreadExceptionEventArgs^ t )
      {
         System::Windows::Forms::DialogResult result = System::Windows::Forms::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 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");
    } //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 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.
private static class CustomExceptionHandler
{
    // Handles the exception event.
    private 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

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