private static void LoadPacketFilesTask(IEnumerable <FileControlParam> files) { var packets_new = CreatePacketContainer(); foreach (var(file, index) in files.Select((value, index) => (value, index))) { /* ステータステキストを更新 */ FormUiManager.SetStatusText( StatusTextID.SaveLoadEventFile, String.Format( "{0} {1} / {2} ({3})", ConfigManager.Language.MainMessage.EventFileLoading.Value, index + 1, files.Count(), packets_new.Count)); /* PacketLogReaderが生成できなければ読み込まない */ var reader = file.Format.CreateReader() as PacketLogReader; if (reader == null) { continue; } /* ファイルを開くことができない場合は何もしない */ if (!reader.Open(file.Option, file.FilePath)) { continue; } DebugManager.MessageOut(string.Format("LoadPacketFile - Start [{0}]", Path.GetFileName(file.FilePath))); /* プログレスバーを初期化 */ FormUiManager.SetProgressBar(0, false); /* ファイルを1つずつ処理 */ var task = (new LoadPacketFileExecTaskDelegate(LoadPacketFileExecTask)).BeginInvoke( packets_new, reader, null, null); /* 完了待ち */ while (!task.IsCompleted) { System.Threading.Thread.Sleep(100); FormUiManager.SetProgressBar((byte)(reader.ProgressNow / (Math.Max(reader.ProgressMax / 100, 1))), false); } } /* コンテナ差し替え */ packets_?.Dispose(); packets_ = packets_new; /* ステータスバーを終了 */ FormUiManager.SetStatusText(StatusTextID.SaveLoadEventFile, ConfigManager.Language.MainMessage.EventFileLoadComplete.Value); FormUiManager.SetProgressBar(100, true); /* 再描画 */ FormTaskManager.RedrawPacketRequest(); }
private static void SavePacketFileTask(FileControlParam file, IEnumerable <PacketConverterInstance> pcvt_list) { var writer = file.Format.CreateWriter() as PacketLogWriter; if (writer == null) { return; } /* ファイルオープン */ if (!writer.Open(file.Option, file.FilePath, false)) { return; } DebugManager.MessageOut(string.Format("SavePacketFile - Start [{0}]", Path.GetFileName(file.FilePath))); var progress_max = Math.Max(packets_.Count, 1); /* ステータスバーを初期化 */ FormUiManager.SetStatusText(StatusTextID.SaveLoadEventFile, ConfigManager.Language.MainMessage.EventFileSaving.Value); FormUiManager.SetProgressBar(0, true); var task_method = new SavePacketFileExecTaskDelegate(SavePacketFileExecTask); var task_result = (IAsyncResult)null; /* --- フィルタ適用有り --- */ if (pcvt_list != null) { var count = (ulong)0; /* 変換器リセット */ PacketConvertManager.InputStatusClear(pcvt_list); var task_packets = (IEnumerable <PacketObject>)null; foreach (var packet in packets_) { /* ベースパケットをパケット変換 */ task_packets = PacketConvertManager.InputPacket(pcvt_list, packet); /* 直前の出力の完了待ち */ if (task_result != null) { task_method.EndInvoke(task_result); } /* 変換後のパケットをファイル出力開始 */ task_result = task_method.BeginInvoke(writer, task_packets, null, null); /* プログレスバー更新 */ FormUiManager.SetProgressBar((byte)((double)(++count) / progress_max * 100), false); } /* 変換器内の残りパケットを処理 */ task_packets = PacketConvertManager.InputBreakOff(pcvt_list); if (task_packets != null) { /* 書込みタスクの完了待ち */ if (task_result != null) { task_method.EndInvoke(task_result); } /* 残りパケットを出力 */ task_result = task_method.BeginInvoke(writer, task_packets, null, null); } /* 書込みタスクの完了待ち */ if (task_result != null) { task_method.EndInvoke(task_result); } } else { /* --- フィルタ適用無し --- */ task_result = task_method.BeginInvoke(writer, packets_, null, null); /* 完了待ち */ while (!task_result.IsCompleted) { System.Threading.Thread.Sleep(100); FormUiManager.SetProgressBar((byte)(writer.ProgressNow / (Math.Max(writer.ProgressMax / 100, 1))), false); } } /* ステータスバーを終了 */ FormUiManager.SetStatusText(StatusTextID.SaveLoadEventFile, ConfigManager.Language.MainMessage.EventFileSaveComplete.Value); FormUiManager.SetProgressBar(100, true); DebugManager.MessageOut("SavePacketFile - Complete"); /* ファイルクローズ */ writer.Close(); }