Exemple #1
0
        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); //Добавляем картинку из каждого элемента на форму.
                }
            }
        }
Exemple #2
0
        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); //Добавляем картинку из каждого элемента на форму.
                }
            }
        }