void TaskConverterDone(object sender) { MyTaskConvertImageFile converter = sender as MyTaskConvertImageFile; TaskMgr.Tasks.Remove(converter); WorkingThread--; if (WorkingThread > 0) { return; } progressBar1.Value = progressBar1.Maximum; listBox1.Items[listBox1.Items.Count - 1] = $"처리 중: {progressBar1.Value}/{progressBar1.Maximum}"; int valueSum = 0; int convSum = 0; int failSum = 0; for (int i = 0; i < MaxProcessor; i++) { valueSum += Converters[i].Value; convSum += Converters[i].Converted; failSum += Converters[i].Failed; } listBox1.Items.Add($"처리 완료. {valueSum}개 중 {convSum}개 성공, {failSum}개 실패"); EntireTaskFinished(); }
void TaskConverterUpdate(object sender) { MyTaskConvertImageFile converter = sender as MyTaskConvertImageFile; int valueSum = 0; for (int i = 0; i < MaxProcessor; i++) { valueSum += Converters[i].Value; } progressBar1.Value = valueSum; listBox1.Items[listBox1.Items.Count - 1] = $"처리 중: {progressBar1.Value}/{progressBar1.Maximum}"; }
void TaskCounterDone(object sender) { MyTaskCountFiles counter = sender as MyTaskCountFiles; TaskMgr.Tasks.Remove(counter); string[] files = counter.Files; progressBar1.Maximum = files.Count(); int processor = Environment.ProcessorCount; if (processor < 1) { listBox1.Items.Add($"오류: 이 장치에 가용 가능한 논리 프로세서가 없음"); EntireTaskFinished(); return; } listBox1.Items.Add($"탐색된 파일 {progressBar1.Maximum} 개에 대한 일괄 처리 개시"); listBox1.Items.Add($"일괄 처리에 프로세서 {processor}개 가용"); MaxProcessor = processor; WorkingThread = processor; Converters = new MyTaskConvertImageFile[processor]; listBox1.Items.Add($"처리 중: {progressBar1.Value}/{progressBar1.Maximum}"); Queue <string>[] subfiles = new Queue <string> [processor]; for (int i = 0; i < MaxProcessor; i++) { subfiles[i] = new Queue <string>(); } { int imax = progressBar1.Maximum; int splt = 0; for (int i = 0; i < imax; i++) { subfiles[splt].Enqueue(files[i]); splt++; if (splt >= MaxProcessor) { splt = 0; } } } for (int i = 0; i < MaxProcessor; i++) { MyTaskConvertImageFile converter = new MyTaskConvertImageFile(this); converter.Files = subfiles[i].ToArray(); converter.TaskUpdate += TaskConverterUpdate; converter.TaskStopped += TaskConverterDone; TaskMgr.Tasks.Add(converter); Converters[i] = converter; MyTaskUpdater updater = new MyTaskUpdater(this); updater.UpdateTarget = converter; updater.UpdateDelay = 500 + 25 * i; converter.Start(); updater.Start(); } }