例外統一治療
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.Textのを。 名前空間WUtility.Common { パブリック クラスActionHelper { プライベート 静的なアクション<例外> _dealException。 パブリック 静的 イベントアクション<例外> DealException { {_dealExceptionを追加 + = 値。} {削除する場合(!_dealException = ヌル)_dealException - = 値。} } /// <要約> ///一般的な例外処理 /// </要約> /// <PARAM NAME = "アクション"> イベント・ロジックに対応する</ param>の /// <PARAM NAME = "国家"> パラメータ</ param>の 公共の 静的な 無効 SafeInvoke (アクション< オブジェクト >アクション、オブジェクトの状態) { 試み { IF(アクション== nullの)リターン; action.Invoke(州); } キャッチ(例外EX)// 例外処理の種類を区別することにより、 { IF(_dealExceptionを!= nullを) _dealException(EX)。 } } /// <要約> /// 通用的异常处理 /// </要約> /// <PARAM NAME = "方法"> </ PARAM> /// <PARAM NAME = "OBJ"> </ PARAM> パブリック 静的 ボイド SafeInvoke(委任方法、paramsは オブジェクト[] OBJ) { 試みる { 場合(方法== NULL)リターン; もし(obj.Length == 0 ) method.DynamicInvoke(ヌル); 他 IF(obj.Length == 1 ) method.DynamicInvoke(OBJ [ 0 ]); 他 IF(obj.Length == 2 ) method.DynamicInvoke(OBJ [ 0 ]、OBJの[ 1 ]); } キャッチ( EX例外)// 例外処理の種類を区別することによって 、{ IF(_dealException!= NULL ) _dealException(EX); } } } }
使用例:
プライベート ボイド button20_Click(オブジェクト送信者、のEventArgs電子) { ActionHelper.DealException + =(OBJ)=> { VAR szInfo = obj.Message。 MessageBox.Show(szInfo)。 }。 VAR K = 20 - 20 。 ActionHelper.SafeInvoke((OBJ) => {MessageBox.Show(" SafeInvokeAcion " +(50 / K));}、NULL ); } プライベート 無効 button21_Click(オブジェクト送信者のEventArgs電子) { ActionHelper.SafeInvoke(新しい TestInvoke(TestSafeInvokeDelegate)、" 12345 "、" 678910 " )。 } プライベート デリゲート のボイド TestInvoke(文字列 szInfo、文字列szInfo2)。 プライベート 無効 TestSafeInvokeDelegate(文字列 szInfo、文字列szInfo2) { VARの情報= szInfo + " ^ " + szInfo2。 MessageBox.Show(情報); }