Sdílet prostřednictvím


Postupy: Definování a instalace globální obslužné rutiny výjimek

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);
}

Viz také

Zpracování výjimek