Cómo: Defina e instale un controlador de excepciones de 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 en el nivel 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);
}