Thread[] loadThreads; //нити, которые будут загружать картинки в программу private void button1_Click(object sender, EventArgs e) //событие нажатия на кнопку "Открыть папку" { FolderBrowserDialog fbd = new FolderBrowserDialog(); //диалог открытия папки if (fbd.ShowDialog() == DialogResult.OK) //если, когда мы его вызвали, пользователь нажал "ОК" (а не, например, "Отмена"), то { List<string> imageFiles = new List<string>(); //создаем новый список, в котором будем хранить пути к нашим изображениям foreach (var extension in imageFormats) //для каждого расширения в массиве расширений: { imageFiles.AddRange(Directory.GetFiles(fbd.SelectedPath, "*." + extension).ToList()); //ищем все файлы в указанной папке, у которых такое расширение и добавляем их в список } //Теперь мы знаем, сколько у нас будет картинок. Переопределяем массивы, чтобы элементов в них было столько же: Images = new ImageStruct[imageFiles.Count]; loadThreads = new Thread[imageFiles.Count]; //Теперь мы будем загружать элементы в массив for (int i = 0; i < Images.Length; i++) //Проходим по всему массиву { Images[i] = new ImageStruct //Загружаем в массив путь к файлу и его номер { Index = i, Path = imageFiles[i] }; //Саму картинку загрузим через нить. Для этого: loadThreads[i] = new Thread(LoadImage); //Инициализируем нить loadThreads[i].Start(Images[i]); //Запускаем её, передав наши аргументы (в том числе, адрес картинки) } foreach (var t in loadThreads) //Ждём, пока все нити закончат работать { t.Join(); } //На этом этапе нити закончили работать, а значит, загрузили наши картинки. Теперь добавим эти картинки на форму. panel1.Controls.Clear(); //Очищаем панель, чтобы загрузить в неё новые картинки foreach (ImageStruct myImageStruct in Images) //проходим по всем элементам в нашем массиве { panel1.Controls.Add(myImageStruct.Container); //Добавляем картинку из каждого элемента на форму. } } }
Thread[] loadThreads; //нити, которые будут загружать картинки в программу private void button1_Click(object sender, EventArgs e) //событие нажатия на кнопку "Открыть папку" { FolderBrowserDialog fbd = new FolderBrowserDialog(); //диалог открытия папки if (fbd.ShowDialog() == DialogResult.OK) //если, когда мы его вызвали, пользователь нажал "ОК" (а не, например, "Отмена"), то { List <string> imageFiles = new List <string>(); //создаем новый список, в котором будем хранить пути к нашим изображениям foreach (var extension in imageFormats) //для каждого расширения в массиве расширений: { imageFiles.AddRange(Directory.GetFiles(fbd.SelectedPath, "*." + extension).ToList()); //ищем все файлы в указанной папке, у которых такое расширение и добавляем их в список } //Теперь мы знаем, сколько у нас будет картинок. Переопределяем массивы, чтобы элементов в них было столько же: Images = new ImageStruct[imageFiles.Count]; loadThreads = new Thread[imageFiles.Count]; //Теперь мы будем загружать элементы в массив for (int i = 0; i < Images.Length; i++) //Проходим по всему массиву { Images[i] = new ImageStruct //Загружаем в массив путь к файлу и его номер { Index = i, Path = imageFiles[i] }; //Саму картинку загрузим через нить. Для этого: loadThreads[i] = new Thread(LoadImage); //Инициализируем нить loadThreads[i].Start(Images[i]); //Запускаем её, передав наши аргументы (в том числе, адрес картинки) } foreach (var t in loadThreads) //Ждём, пока все нити закончат работать { t.Join(); } //На этом этапе нити закончили работать, а значит, загрузили наши картинки. Теперь добавим эти картинки на форму. panel1.Controls.Clear(); //Очищаем панель, чтобы загрузить в неё новые картинки foreach (ImageStruct myImageStruct in Images) //проходим по всем элементам в нашем массиве { panel1.Controls.Add(myImageStruct.Container); //Добавляем картинку из каждого элемента на форму. } } }