Jak: definiowanie i zainstalować obsługi wyjątków globalne
Poniższy przykład kodu pokazuje w jaki sposób nieobsłużone wyjątki mogą być przechwytywane.Przykładowy formularz zawiera przycisk, który po naciśnięciu wykonuje odwołania zerowego, powodując być zgłoszony wyjątek.Ta funkcja reprezentuje błąd typowe kodu.Wynikowy wyjątek przez procedury obsługi wyjątków całej aplikacji, instalowane przez głównych funkcji.
Można to osiągnąć przez powiązanie pełnomocnikowi na ThreadException zdarzenia.W przypadku kolejnych wyjątków 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);
}