Поделиться через


Как Определение и установите глобальный обработчик исключений

В следующем примере кода показано, как необработанные исключения можно заключить. Пример формы, которая содержит кнопку, отжиманный выполняет пустую ссылку, вызывает исключение делегатом. Эта функция представляет ultimate сбой кода. Результирующее исключение обработано на уровне приложения обработчиком исключений задать основной функцией.

Это достигается путем связывания делегата для события ThreadException. В этом случае следующие исключения затем передаются методу App::OnUnhandled.

Пример

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

См. также

Другие ресурсы

Обработка исключений (расширения компонентов C++)