Compartir a través de


Cómo: Definir e instalar un controlador de excepciones global

El ejemplo de código siguiente muestra cómo las excepciones no controladas pueden ser capturadas. El formulario de ejemplo contiene un botón que, cuando está presionado, realice una referencia nula, produciendo una excepción. Esta funcionalidad representa un error típico del código. La excepción resultante es detectada por el controlador de excepciones aplicación- ancho instalado por la función principal.

Esto se lleva a cabo enlazando un delegado al evento de ThreadException . En este caso, las excepciones subsiguientes se envían al método de App::OnUnhandled .

Ejemplo

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

Vea también

Otros recursos

Control de excepciones con /clr