Porady: definiowanie i instalowanie globalnego programu obsługi wyjątków
Poniższy przykład kodu demonstruje sposób nieobsłużonymi wyjątkami mogą być przechwytywane.Przykładowy formularz zawiera przycisk, który po naciśnięciu wykonuje odwołanie o wartości null, powodując wyjątek zostanie wygenerowany.Ta funkcja reprezentuje błąd typowe kodu.Wynikowy przechwycono przez zainstalowane przez główną funkcją Obsługa wyjątków całej aplikacji.
Można to osiągnąć przez powiązanie pełnomocnika, który ThreadException zdarzenia.W tym przypadku, kolejne wyjątki są następnie wysyłane do App::OnUnhandled metody.
Przykład
// 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);
}