private void RunMainTask(object parameter) { SwitchStatus(); var installMode = (bool)((object[])parameter)[0]; var items = (IList <NgenFileItem>)((object[])parameter)[1]; var previousStatus = new NgenFileStatus[items.Count]; for (var i = 0; i < items.Count; i++) { var file = items[i]; previousStatus[i] = file.Status; file.Status = NgenFileStatus.Pending; } var processedFiles = 0; Parallel.For(0, items.Count, (currentIndex, state) => { if (Status == AppStatus.Stopping) { state.Stop(); } var file = items[currentIndex]; file.Status = NgenFileStatus.InProgress; var ngen = new NgenProcess(file.AssemblyDetails); var installed = ngen.Check(); if (installMode && !installed) { ngen.Install(); installed = ngen.Check(); } else if (!installMode && installed) { ngen.Uninstall(); installed = ngen.Check(); } file.Status = installed ? NgenFileStatus.Installed : NgenFileStatus.Deinstalled; lock (Locker) { processedFiles++; OnProgressChanged(processedFiles, FileList.Count); } } ); for (var i = 0; i < items.Count; i++) { if (items[i].Status == NgenFileStatus.Pending) { items[i].Status = previousStatus[i]; } } SwitchStatus(); }
public NgenFileItem(AssemblyDetails assemblyDetails, NgenFileStatus status) { AssemblyDetails = assemblyDetails; Status = status; AssemblyFile = Path.GetFileName(assemblyDetails.AssemblyFile); }