Gewusst wie: Definieren und installieren Sie einen globalen Ausnahmehandler
Im folgenden Codebeispiel wird veranschaulicht, wie Ausnahmen erfasst werden können. Das Beispielsformular enthält eine Schaltfläche, die, falls sie gedrückt wird, einen NULL-Verweis ausführt und bewirkt eine Ausnahme ausgelöst. Diese Funktion stellt einen typischen Codefehler dar. Die resultierende Ausnahme wird vom Ausnahmehandler anwendungsweiten abgefangen, der von der Hauptfunktion installiert ist.
Dies wird erreicht, indem einen Delegaten dem ThreadException-Ereignis bindet. In diesem Fall wird folgende Ausnahmen dann zur App::OnUnhandled-Methode gesendet.
Beispiel
// 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);
}