Вы не возражаете, бегущая по вертикали?
Я хотел бы начать с контролем DataGridView в качестве основы и создать следующую реализацию:
1) Создание пользовательских столбцов и тип клеток, производный от DataGridViewImageColumn. Вы можете назвать их «CronosNetImageColumn», «CronosNetImageCell».
2) Создайте класс «CronosImageDetails» для хранения данных соты (включая свойства для отображения текста и URL-адреса изображения). Это будет передано как значение для каждой ячейки. Пример:
ImageGrid.Rows.Add (новый CronosImageDetails {DisplayText = "День на пляже", ImageURL = "http: //...beach.jpg"});
3) Перекройте ячейку Paint(), чтобы использовать WebClient для получения изображения и использовать e.Graphics.DrawImage (ImageObtainedFromWebClient), чтобы нарисовать изображение в ячейке. Вы можете использовать e.Graphics.DrawString ((CronosImageDetails) value.DisplayText, ...) для наложения текста в ячейку.
Это быстрое решение предоставит вам прокручивающийся имидж, который загружает изображения только в том случае, если пользователь прокручивает список и обеспечивает прочную основу для улучшения.
Рекомендуемые дальнейшие оптимизации:
A) Создание BackBuffer битовой карты и графики для рисования данных ячейки.
B) Paint Setup(), чтобы просто покрасить BackBuffer вместо того, чтобы делать работу, чтобы получить изображение
C) создать новый метод клеточной LoadImage(), что порождает новый поток, который загружает изображение и рисует его на задний буфер.
D) Имейте Paint() (или отдельную вспомогательную резьбу), отслеживайте направление и ускорение прокрутки и оценивайте, какие ячейки необходимо предварительно загрузить. Trigger LoadImage() для этих ячеек.
E) Инициализируйте задний буфер каждой ячейки загрузочным изображением.
F) Отслеживайте и используйте эмпирические данные из времени загрузки изображения, чтобы определить, какие ячейки необходимо предварительно загрузить.
Спасибо, позвольте мне попробовать метод loadAsync(), я делаю точный способ, который вы упоминали – Azlam 2008-11-26 04:31:58