private void WorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs) { WorkerParam param = doWorkEventArgs.Argument as WorkerParam; doWorkEventArgs.Result = new WorkerResult() { Times = PingUtil.Ping(param.Address), RowIndex = param.RowIndex }; }
private void _BackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { OnPropertyChanged("isWorkerRunning"); BackgroundWorker worker = (BackgroundWorker)sender; WorkerParam param = (WorkerParam)e.Argument; WorkerStatus = "Update Started!"; _repository.UpdateData(param.Query, param.Type, param.MaxAge, worker, e); }
/// <summary> /// ZIPファイルの画像をWebPに変換してZIPファイルとして再度作成する /// </summary> /// <param name="zipFile">ZIPファイルパス</param> /// <param name="param">変換パラメーター</param> /// <returns></returns> private static bool imageZipToWebpZip(string zipFile, WorkerParam param) { string workDir = ""; try { //作業フォルダを作成 workDir = createWorkDir(); Log.Info($"作業フォルダ={workDir}"); Encoding entryEnc = param.UseSjisEnc ? _zipEntrySjisEncoding : _zipEntryDefaultEncoding; //ZIP展開 if (!unzip(zipFile, workDir, entryEnc)) { return(false); } //画像ファイル一覧を取得 var imageFileList = Directory.GetFiles(workDir).Where( file => _imageExtList.Any(ext => file.ToLower().EndsWith(ext))); if (!imageFileList.Any()) { Log.Error("変換対象ファイルが見つからない"); return(false); } //画像を変換する var loopResult = Parallel.ForEach(imageFileList, (imageFile, loopState) => { if (!imageToWebp(imageFile, param.Quality, true)) { loopState.Stop(); } }); if (!loopResult.IsCompleted) { Log.Warn("WebP変換処理エラーにより処理中断"); return(false); } //ZIPに固める var workZipFile = workDir + ".zip"; if (!zip(workDir, workZipFile, param.Level, entryEnc)) { return(false); } //元の位置に移動する if (param.IsDelete) { //もとにファイルに上書き File.Move(workZipFile, zipFile, true); } else { //別名で保存 var zipDirPath = Path.GetDirectoryName(zipFile); if (zipDirPath == null) { return(false); } var moveZipPath = Path.Combine(zipDirPath, Path.GetFileNameWithoutExtension(zipFile) + "_webp.zip"); File.Move(workZipFile, moveZipPath, true); } } catch (Exception e) { Log.Error(e, "変換処理例が発生"); return(false); } finally { //作業フォルダを削除 if (!string.IsNullOrEmpty(workDir)) { if (Directory.Exists(workDir)) { Directory.Delete(workDir, true); } } } return(true); }