![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
Всем привет. хочу сделать просмотр графических файлов на подобии такого как в ACDSee, т.е. открывается куча меленьких картинок из всех картинок в директории, а по щелчку на какой нибудь из них открывается большая, вопрос куда копать, и как сделать что бы не тормозило и не вешала систему. попробовал сделать так(читаю все файлы из директории, потом создаю для каждого файла PictureBox и добавляю его на форму):
оно в принципе работает, но если в директории много файлов(пробовал с 200), то долго тупит, а потом выпадает Out of memory, так что это не подходит, подскажите как сделать. |
|||
|
||||
| Alekz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 5.2.2008 Где: Запорожье, Украин а Репутация: нет Всего: 2 |
В PictureBox грузятся полные изображения.
Логичнее показывать thumbnail'ы - это сильно улучшить производительность. |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
Alekz, спасибо, в принципе это ускорило работу, но все равно приходиться ждать пока загрузятся все изображения. а как сделать что бы рисовало и грузило одновременно? я так понимаю это в отдельном потоке нужно делать?
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
http://msdn.microsoft.com/ru-ru/library/sy...oundworker.aspx
А это принципиально, чтобы все сразу грузились? Ведь отобразить 200 маленьких картинок одновременно не реально. Может их лучше подгружать по мере надобности? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
diadiavova, конечно не принципиально! просто я не знаю как. это наверное надо держать в памяти только те картинки которые в данный момент на экране(ну можно еще с запасом), но как это сделать, и как потом подгружать, по какому событию(наверное по прокрутке), короче очень много вопросв. а ответов пока нету. BackgroundWorker - это конечно хорошо, но он вроде тоже только все сразу вернет, или можно сделать что бы он возвращал что то через определенный интервал?
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Дело в том, что когда ты располагаешь много пикчербоксов на панели у тебя всё равно память грузится. Я бы вообще отказался от такой идеи. Вместо этого на панели можно разместить несколько пикчербоксов и при смене вида просто менять их свойство Image. Нажимаешь на какую-нибудь кнопочку и в эти пикчербоксы запихивается следующая серия картинок. А сколько из них в памяти держать 0 тебе решать.
Бэкграундвокер выполняет ровно те действия, которые ты пропишешь. В обработчике события DoWork вокера вызови метод , который надо выполнить в отдельном потоке, а чтобы начать выполнение у вокера надо вызвать метод RunWorkerAsync. В своём методе можешь прописать загрузку небольшой порции, а когда понадобится отальное - вызови RunWorkerAsync снова. Метод RunWorkerAsync перегружен, так что можно выполнять операцию с аргументами, которые потом можно передать методу(например диапазон картинок, которые надо грузить). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Cinemaizer[Олег] |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.4.2008 Где: Москва Репутация: нет Всего: 0 |
||||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |