Udostępnij za pośrednictwem


Porady: definiowanie i instalowanie globalnego programu obsługi wyjątków

W poniższym przykładzie kodu pokazano, jak nieobsługiwane wyjątki można przechwycić. Przykładowy formularz zawiera przycisk, który po naciśnięciu przycisku wykonuje odwołanie o wartości null, co powoduje zgłoszenie wyjątku. Ta funkcja reprezentuje typowy błąd kodu. Wynikowy wyjątek jest przechwytywane przez program obsługi wyjątków dla całej aplikacji zainstalowany przez funkcję main.

Jest to realizowane przez powiązanie delegata ze zdarzeniem ThreadException . W takim 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ż

Obsługa wyjątków