/// <summary> /// 変換を行います。 /// </summary> /// <param name="parameter">変換パラメーター。</param> public ConvertResultType Convert(IConvertParameter parameter) { var cea = new CancelEventArgs(); cea.Cancel = false; Prepare?.Invoke(parameter, cea); if (cea.Cancel) { var r = new ConvertResultType(); r = ConvertResultType.Cancelled; var ccea = new ConvertCompleteEventArgs(); ccea.Result = ConvertResultType.Cancelled; ConvertCompleted?.Invoke(parameter, ccea); return(r); } try { return(onConvert(parameter)); } catch (Exception e) { var result = new ConvertCompleteEventArgs(); result.Result = ConvertResultType.Failed; result.Error = e; ConvertCompleted?.Invoke(parameter, result); return(result.Result); } }
/// <summary> /// 変換の呼び出しを実施する。 /// </summary> /// <param name="parameter"></param> /// <returns></returns> private ConvertResultType onConvert(IConvertParameter parameter) { var result = new ConvertCompleteEventArgs(); // 変換処理 DoConvert(parameter); result.Result = ConvertResultType.Succeed; result.Error = null; ConvertCompleted?.Invoke(parameter, result); return(result.Result); }
/// <summary> /// 変換を行います。 /// </summary> /// <param name="parameter">変換パラメーター。</param> protected override sealed void DoConvert(IConvertParameter parameter) { Parameter = parameter as FileConvertParameter; // 一時ディレクトリの設定 Parameter.TemporaryDirectory = SetTemporaryDirectory(); // 一時ファイルパスの生成 Parameter.TemporaryFilePath = CreateTemporaryFilePath(); // 変換先ファイルパスの決定 Parameter.ConvertingPath = Parameter.UseTemporary ? Parameter.TemporaryFilePath : Parameter.DestinationFilePath; // 変換可能なパラメーターであるかを確認する if (!CanConvert()) { throw new ArgumentException(ErrorMessage); } // 一時ファイルパスのディレクトリを作成 if (Parameter.UseTemporary && !Directory.Exists(Parameter.TemporaryDirectory)) { Directory.CreateDirectory(Parameter.TemporaryDirectory); } // 変換実行 ConvertFile(Parameter); // 一時パスのファイルを変換後ファイルパスへ移動 if (Parameter.UseTemporary) { try { TempFileToDestFile(); } catch { File.Delete(Parameter.TemporaryFilePath); throw; } } }
/// <summary> /// 変換を行います。 /// </summary> /// <param name="parameter">変換パラメーター。</param> /// <returns>ConvertResult のタスク。</returns> public async Task <ConvertResultType> ConvertAsync(IConvertParameter parameter) { var e = new CancelEventArgs(); e.Cancel = false; Prepare?.Invoke(parameter, e); if (e.Cancel) { var r = new ConvertResultType(); r = ConvertResultType.Cancelled; var cea = new ConvertCompleteEventArgs(); cea.Result = ConvertResultType.Cancelled; ConvertCompleted?.Invoke(parameter, cea); return(r); } var result = await onConvertTask(parameter); return(result); }
/// <summary> /// 非同期で変換を行うためのタスクメソッド。 /// </summary> /// <param name="parameter">変換パラメーター。</param> /// <returns>ConvertResult のタスク。</returns> private Task <ConvertResultType> onConvertTask(IConvertParameter parameter) { var task = new Task <ConvertResultType>(() => { try { return(onConvert(parameter)); } catch (Exception e) { var result = new ConvertCompleteEventArgs(); result.Result = ConvertResultType.Failed; result.Error = e; ConvertCompleted?.Invoke(parameter, result); return(result.Result); } }); task.Start(); return(task); }
/// <summary> /// 変換を行います。 /// </summary> /// <param name="parameter">変換パラメーター</param> protected abstract void DoConvert(IConvertParameter parameter);