Udostępnij za pośrednictwem


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

Zobacz też

Inne zasoby

Obsługa w obszarze/CLR wyjątków