Compartilhar via


Como: definir e instalar um manipulador de exceção Global

O exemplo de código a seguir demonstra como unhandled exceptions pode ser capturado.O formulário de exemplo contém um botão que, quando pressionada, executa uma referência nula, causando uma exceção seja lançada.Esta funcionalidade representa uma falha do código típico.A exceção resultante é interceptada pelo manipulador de exceção de todo o aplicativo instalado pela função principal.

Isso é realizado pela vinculação a um delegado para o ThreadException eventos.Nesse caso, as exceções subseqüentes são enviadas para o App::OnUnhandled método.

Exemplo

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

Consulte também

Outros recursos

Tratamento de Exceção (Extensões de Componentes C++)