private static void MergeThread(object o) { #if TEST_AS_FRENCH Tools.SetThreadToFrench(); #endif MergeThreadParams mtp = (MergeThreadParams)o; WaitDlg dlg = mtp.dlg; List <string> inFiles = mtp.files; string fileDir = Path.GetDirectoryName(inFiles[0]); inFiles.Sort(new LogicalComparer(fileDir.Length)); try { Stopwatch sw = new Stopwatch(); using (Archiver archive = new Archiver(mtp.outFile, mtp.fileAlignment)) { sw.Start(); dlg.UpdateStatus("Adding {0} files", inFiles.Count); archive.AddFiles(inFiles, mtp.compression); dlg.UpdateStatus("Waiting for completion"); archive.Finish(); sw.Stop(); } dlg.AllowClose("Completed in {0:F2} seconds", sw.Elapsed.TotalSeconds); } catch (Exception e) { string exception = String.Format("Failed with exception {0} during merge of {1} files", e.Message, inFiles.Count); dlg.AllowClose(exception); DebugLogger.Log("Merge", exception + "{0}{1}", Environment.NewLine, e.StackTrace); } GC.Collect(); }
private static void MergeFiles(List <string> inFiles, string outFile, string operation, int compression, int fileAlignment, IWin32Window parent) { if (inFiles.Count <= 1) { MainForm.DisplayMsgBox(MessageBoxButtons.OK, MessageBoxIcon.Error, "Directory contains only one or no files to merge"); return; } using (WaitDlg dlg = new WaitDlg(operation)) { dlg.UpdateStatus("Please wait while files are being merged and compressed"); Thread mergeThread = new Thread(new ParameterizedThreadStart(MergeThread)); mergeThread.SetApartmentState(ApartmentState.STA); MergeThreadParams mtp = new MergeThreadParams(dlg, inFiles, outFile, compression, fileAlignment); mergeThread.Start(mtp); dlg.ShowDialog(parent); } }