Example #1
0
        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();
        }
Example #2
0
 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);
     }
 }