Delen via


Procedure: Een globale uitzonderingshandler definiëren en installeren

In het volgende codevoorbeeld ziet u hoe niet-verwerkte uitzonderingen kunnen worden vastgelegd. Het voorbeeldformulier bevat een knop die, wanneer u erop drukt, een null-verwijzing uitvoert, waardoor er een uitzondering wordt gegenereerd. Deze functionaliteit vertegenwoordigt een typische codefout. De resulterende uitzondering wordt gevangen door de toepassingsbrede uitzonderingshandler die door de hoofdfunctie is geïnstalleerd.

Dit wordt bereikt door een gedelegeerde aan de ThreadException gebeurtenis te binden. In dit geval worden volgende uitzonderingen vervolgens naar de App::OnUnhandled methode verzonden.

Voorbeeld

// 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);
}

Zie ook

afhandeling van uitzonderingen