Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující příklad kódu ukazuje, jak je možné zachytit neošetřené výjimky. Ukázkový formulář obsahuje tlačítko, které při stisknutí provede odkaz null, což způsobí vyvolání výjimky. Tato funkce představuje typické selhání kódu. Výsledná výjimka je zachycena obslužnou rutinou výjimky pro celou aplikaci nainstalovanou hlavní funkcí.
Toho se dosahuje vazbou delegáta ThreadException na událost. V tomto případě se do metody odešlou App::OnUnhandled další výjimky.
Příklad
// 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);
}