ArcObjects编程方法(九):错误处理与调试
版本: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); }