Comment : définir et installer un gestionnaire d'exceptions global
L’exemple de code suivant montre comment les exceptions non gérées peuvent être capturées. L’exemple de formulaire contient un bouton qui, lorsqu’il est appuyé, effectue une référence null, ce qui entraîne la levée d’une exception. Cette fonctionnalité représente un échec de code classique. L’exception résultante est interceptée par le gestionnaire d’exceptions à l’échelle de l’application installé par la fonction principale.
Pour ce faire, vous devez lier un délégué à l’événement ThreadException . Dans ce cas, les exceptions suivantes sont ensuite envoyées à la App::OnUnhandled
méthode.
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);
}