Gewusst wie: Definieren und Installieren eines globalen Ausnahmehandlers

Im folgenden Codebeispiel wird veranschaulicht, wie unbehandelte Ausnahmen erfasst werden können. Das Beispielformular enthält eine Schaltfläche, die beim Drücken einen Nullverweis ausführt, wodurch eine Ausnahme ausgelöst wird. Diese Funktionalität stellt einen typischen Codefehler dar. Die resultierende Ausnahme wird vom anwendungsweiten Ausnahmehandler erfasst, der von der Standard-Funktion installiert wurde.

Dies wird durch Binden eines Delegaten an das ThreadException Ereignis erreicht. In diesem Fall werden nachfolgende Ausnahmen dann an die App::OnUnhandled Methode gesendet.

Beispiel

// global_exception_handler.cpp
// compile with: /clr
#using <system.dll>
#using <system.drawing.dll>
#using <system.windows.forms.dll>

using namespace System;
using namespace System::Threading;
using namespace System::Drawing;
using namespace System::Windows::Forms;

ref class MyForm : public Form
{
   Button^ b;
public:
   MyForm( )
   {
      b = gcnew Button( );
      b->Text = "Do Null Access";
      b->Size = Drawing::Size(150, 30);
      b->Click += gcnew EventHandler(this, &MyForm::OnClick);
      Controls->Add(b);
   }
   void OnClick(Object^ sender, EventArgs^ args)
   {
      // do something illegal, like call through a null pointer...
      Object^ o = nullptr;
      o->ToString( );
   }
};

ref class App
{
public:
   static void OnUnhandled(Object^ sender, ThreadExceptionEventArgs^ e)
   {
      MessageBox::Show(e->Exception->Message, "Global Exeception");
      Application::ExitThread( );
   }
};

int main()
{
   Application::ThreadException += gcnew
      ThreadExceptionEventHandler(App::OnUnhandled);

   MyForm^ form = gcnew MyForm( );
   Application::Run(form);
}

Siehe auch

Ausnahmebehandlung