static void Main(string[] args)
        {
            //string[] fileList = Directory.GetFiles(".", "*.png");
            //int threadsMaxCount = Environment.ProcessorCount;

            //PNGCompMT.CompressMT(fileList, threadsMaxCount);

            //Console.WriteLine("\nAll compressed. \nPress Enter to quit.");
            //Console.ReadLine();

            //Image image = Image.FromFile("test.png");
            //image.Save("test1.png", ImageFormat.Png);
            PNGComp pngComp = new PNGComp("main.vpy - 13576.png", "backup/main.vpy - 13576.png");

            pngComp.Compress(false);
        }
Beispiel #2
0
        static internal void CompressMT(string[] fileList, int threadsMaxCount)
        {
            for (int i = 0; i < fileList.Length; i++)
            {
                fileList[i] = Path.GetFileName(fileList[i]);
            }
            fileCount = fileList.Length;
            if (fileCount < threadsMaxCount)
            {
                threadsMaxCount = fileCount;
            }
            if (!Directory.Exists("backup"))
            {
                Directory.CreateDirectory("backup");
            }

            tasks = new Task[threadsMaxCount];
            Action <object> action = (object obj) =>
            {
                string  fileNameString     = obj.ToString();
                string  fileTempNameString = "temp." + fileNameString;
                PNGComp pngComp            = new PNGComp(fileNameString, fileTempNameString);
                pngComp.Compress(false);
                FileInfo fileInfo = new FileInfo(fileNameString);
                fileInfo.MoveTo("backup/" + fileNameString);
                fileInfo = new FileInfo(fileTempNameString);
                fileInfo.MoveTo(fileNameString);
            };

            Console.WriteLine("Compressing {0:D} .png files......", fileCount);
            for (i = 0; i < fileCount; i++)
            {
                if (i < threadsMaxCount)
                {
                    tasks[i] = new Task(action, fileList[i]);
                    tasks[i].Start();
                }
                else
                {
                    j        = Task.WaitAny(tasks);
                    tasks[j] = new Task(action, fileList[i]);
                    tasks[j].Start();
                }
            }
            Task.WaitAll(tasks);
        }