Comment : Définissez et installez un gestionnaire d'exceptions globales
L'exemple de code suivant montre comment les exceptions non gérées peuvent être capturées.Le formulaire d'exemple contient un bouton qui, une fois activé, effectue une référence null, provoquant une exception.Cette fonctionnalité représente une défaillance typique de code.L'exception résultante est interceptée par le gestionnaire d'exceptions application installée par la fonction principale.
Cela est accompli en liant un délégué à l'événement d' ThreadException .Dans ce cas, les exceptions suivantes sont ensuite envoyées à la méthode d' App::OnUnhandled .
Exemple
// 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);
}