System.threading <一> [EAggregateException]
来源:互联网 发布:php视频上传网站源码 编辑:程序博客网 时间:2024/06/06 06:59
//事件过程指针 TExceptionHandlerEvent = procedure (const AException: Exception; var Handled: Boolean) of object; //匿名方法 TExceptionHandlerProc = reference to procedure (const AException: Exception; var Handled: Boolean); EAggregateException = class(Exception) {class↓ 内部类型TExceptionEnumerator 协助管理异常FInnerExceptions数组} public type TExceptionEnumerator = class //枚举器 private FIndex: Integer; //FInnerExceptions数组的游标 FException: EAggregateException; //拥有者 function GetCurrent: Exception; inline;//获取游标指向的Exception对象 //构建函数 参数是其拥有者 constructor Create(const AException: EAggregateException); public //游标后移 function MoveNext: Boolean; inline; //游标指向的Exception对象 property Current: Exception read GetCurrent; end; {class↑} private FInnerExceptions: TArray<Exception>;//内部存储异常数据数组 function GetCount: Integer; inline;//返回异常个数 function GetInnerException(Index: Integer): Exception; inline;//获取指定异常 procedure ExtractExceptionsToList(const AList: TList<Exception>);//导出异常到AList //三种构建函数 constructor Create(const AMessage: string; const AList: TList<Exception>); overload; public constructor Create(const AExceptionArray: array of Exception); overload; constructor Create(const AMessage: string; const AExceptionArray: array of Exception); overload; //解构函数 destructor Destroy; override; //获取异常枚举器TExceptionEnumerator function GetEnumerator: TExceptionEnumerator; inline; // Handle函数 支持2中形式 匿名方法与事件指针 procedure Handle(AExceptionHandlerEvent: TExceptionHandlerEvent); overload; procedure Handle(const AExceptionHandlerProc: TExceptionHandlerProc); overload; // FInnerExceptions所有异常信息字符串 function ToString: string; override; property Count: Integer read GetCount; property InnerExceptions[Index: Integer]: Exception read GetInnerException; default; end;//----------implementation//----------procedure EAggregateException.Handle(AExceptionHandlerEvent: TExceptionHandlerEvent);begin Handle( // 将事件指针转换成匿名函数,呼叫同名重载Handle函数 procedure (const AException: Exception; var Handled: Boolean) begin AExceptionHandlerEvent(AException, Handled); end);end;// 参数 异常处理函数// 如果异常完全处理完,则不触发异常信息。//TExceptionHandlerProc = reference to procedure (const AException: Exception//注解:参数1:异常对象; var Handled: Boolean//注解:参数2:Out型参数 携带true返回则代表异常被成功处理);procedure EAggregateException.Handle(const AExceptionHandlerProc: TExceptionHandlerProc);var I: Integer; Handled: Boolean; List: TList<Exception>;begin List := nil; try for I := 0 to Length(FInnerExceptions) - 1 do begin Handled := False; AExceptionHandlerProc(FInnerExceptions[I], Handled); if not Handled then begin if List = nil then List := TList<Exception>.Create; List.Add(FInnerExceptions[I]); end; end; if List <> nil then begin FInnerExceptions := nil; raise EAggregateException.Create(Message, List); end; finally List.Free; end;end;
0 0
- System.threading <一> [EAggregateException]
- System.Threading
- System.Threading
- system.threading WaitHandle
- System.Threading.Timer 使用
- System.Threading.Thread类
- System.Threading.Timer
- 注解:System.Threading.Timer
- System.Threading.Mutex
- System.Threading.Timer应用
- System.Threading.Thread类
- System.Threading.Semaphore
- System.Threading 命名空间
- System.Threading.Thread.Sleep()
- System.Threading.ThreadStateException
- System.Threading.Timer的使用
- System.Threading.Parallel 的用法
- .NET 4 System.Threading.CountdownEvent
- exited eith code错误剖析
- 大型分布式网站术语分析
- AppDelegate
- PAT 1011
- 创建两个全局的tableview
- System.threading <一> [EAggregateException]
- __del__的几个坑
- CGSize
- Linux内核:简介
- Mongodb副本集实现及读写分离
- 控制器初始化和presentViewController
- java 普里姆(Prim)算法求图的最小生成树
- 停靠模式
- 关于时间的小诗