如何:定义和安装全局异常处理程序

下面的代码示例演示如何能捕获未经处理的异常。 示例窗体中,按下,执行空引用的一个按钮,会导致引发异常。 该功能表示典型失败的代码。 发生的异常由主函数安装的应用程序异常处理程序捕获。

这通过委托绑定完成到 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);
}

请参见

其他资源

异常处理在 /clr 下