private void bgWorker_DoWork(object sender, DoWorkEventArgs e) { object[] objects = (object[])e.Argument; bool hasWalls = (bool)objects[0]; string fileName = (string)objects[1] + "/" + (string)objects[2] + ".lammpstrj"; string format = (string)objects[3]; double[] shifts = (double[])objects[4]; bool toTrim = (bool)objects[5]; double percentage = (double)objects[6] / 100.0; string[] files = (string[])objects[7]; for (int i = 0; i < files.Length; i++) { double[] sizes = new double[3]; List <double[]> data; if (format == "xyzr") { data = FileWorker.LoadXyzrLines(files[i]); sizes[0] = Math.Abs(data[data.Count - 1][0] - data[data.Count - 8][0]); sizes[1] = Math.Abs(data[data.Count - 1][1] - data[data.Count - 8][1]); sizes[2] = Math.Abs(data[data.Count - 1][2]); } else { int snapnum = 0; data = FileWorker.LoadLammpstrjLines(files[i], out snapnum, out sizes); } double[] centerPoint = MolData.GetCenterPoint(sizes, data); var system = MolData.ShiftAll(hasWalls, 0, false, 3, sizes, shifts, centerPoint, data); if (toTrim) { system = MolData.ReduceSystem(system, percentage); } FileWorker.SaveLammpstrj(true, fileName, i + 1, sizes, 3, system); int filesCount = (int)((double)files.Length / 100.0); if (filesCount == 0) { filesCount++; } if (i % filesCount == 0) { if (((BackgroundWorker)sender).CancellationPending) { e.Cancel = true; break; } ((BackgroundWorker)sender).ReportProgress((int)(100.0 * (double)i / (double)files.Length)); } } }