Bagikan melalui


Cara: Menentukan dan Menginstal Handler Pengecualian Global

Contoh kode berikut menunjukkan bagaimana pengecualian yang tidak tertangani dapat diambil. Formulir contoh berisi tombol yang, ketika ditekan, melakukan referensi null, menyebabkan pengecualian dilemparkan. Fungsionalitas ini mewakili kegagalan kode umum. Pengecualian yang dihasilkan ditangkap oleh handler pengecualian di seluruh aplikasi yang diinstal oleh fungsi utama.

Ini dilakukan dengan mengikat delegasi ke acara tersebut ThreadException . Dalam hal ini, pengecualian berikutnya kemudian dikirim ke App::OnUnhandled metode .

Contoh

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

Baca juga

Penanganan Pengecualian