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