Condividi tramite


Procedura: definire e installare un gestore eccezioni globale

Nell'esempio di codice seguente viene illustrato come acquisire le eccezioni non gestite. Il modulo di esempio contiene un pulsante che, quando premuto, esegue un riferimento Null, causando la generazione di un'eccezione. Questa funzionalità rappresenta un errore di codice tipico. L'eccezione risultante viene intercettata dal gestore eccezioni a livello di applicazione installato dalla funzione main.

Questa operazione viene eseguita associando un delegato all'evento ThreadException . In questo caso, le eccezioni successive vengono quindi inviate al App::OnUnhandled metodo .

Esempio

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

Vedi anche

Gestione delle eccezioni