版本:ArcGIS 10
错误处理是编写健壮程序的重要部分,它可以防止程序遇到异常时崩溃。.NET采用Try, Catch, Finally结构来捕获异常,防止程序崩溃。ArcObjects基于COM技术,遇到异常时,会以HRESULTS形式返回错误,并返回给COMException。
Try, Catch, and Finally结构
该结构可以用来捕获程序中抛出的异常:
[C#]
try
{
IEnvelope env = new EnvelopeClass();
env.PutCoords(0D, 0D, 10D, 10D);
ITransform2D trans = (ITransform2D)env;
trans.Rotate(env.LowerLeft, 1D);
}
catch (System.Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
finally
{
// Clean up the code.
}
一个try语句可以对应多个catch语句,用来捕获不同类型的异常:
[C#]
catch (DivideByZeroException divEx)
{
// 除以0时,异常处理
}
catch (System.Exception ex)
{
// 一般异常处理
}
COM组件错误处理
当COM组件遇到错误时会返回以HRESULT结构返回错误信息,HRESULT被增加到COMException实例中,进而就可以用try, catch结构来处理COM异常:
[C#]
try
{
IEnvelope env = new EnvelopeClass();
env.PutCoords(0D, 0D, 10D, 10D);
ITransform2D trans = (ITransform2D)env;
trans.Rotate(env.LowerLeft, 1D);
}
catch (COMException COMex)
{
if (COMex.ErrorCode == - 2147220984)
MessageBox.Show("You cannot rotate an Envelope");
MessageBox.Show("Error " + COMex.ErrorCode.ToString() + ": " + COMex.Message);
}
catch (System.Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}