Nasıl yapılır: Genel Bir Özel Durum İşleyicisi Tanımlama ve Yükleme

Aşağıdaki kod örneği, işlenmeyen özel durumların nasıl yakalanabileceğini gösterir. Örnek form, basıldığında null başvuru gerçekleştiren ve bir özel durumun oluşturulmasına neden olan bir düğme içerir. Bu işlev tipik bir kod hatasını temsil eder. Ortaya çıkan özel durum, ana işlev tarafından yüklenen uygulama genelinde özel durum işleyicisi tarafından yakalanıyor.

Bu, bir temsilciyi ThreadException olaya bağlayarak gerçekleştirilir. Bu durumda, sonraki özel durumlar yöntemine App::OnUnhandled gönderilir.

Örnek

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

Ayrıca bkz.

Özel Durum İşleme