Sdílet prostřednictvím


Postup: definovat a nainstalujte popisovač globální výjimky

Následující příklad kódu ukazuje, jak neošetřené výjimky lze zachytit.Příklad formuláře obsahuje tlačítko, které při stisknutí, provede odkaz s hodnotou null, způsobí vyvolání výjimky.Tato funkce představuje typický kód chyby.Výsledné výjimka je zpracována obslužná rutina výjimky celé aplikace nainstalována ve funkci main.

To lze provést pomocí delegáta pro vytvoření vazby ThreadException události.V tomto případě následující výjimky jsou potom odeslány App::OnUnhandled metody.

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é

Další zdroje

Zpracování výjimek (rozšíření komponent C++)