У вас есть два варианта: один объект более ориентирован, чем другой, но сложнее реализовать:
A) Создать некоторый класс (например, Document, BitmapDocument или любой другой), который содержит список, в который вы добавляете всеваши изображения.Не беспокойтесь о многопоточности, просто блокируйте список каждый раз, когда добавляете изображение.В зависимости от того, что вы делаете с растровыми изображениями, вам также может понадобиться заблокировать их.(блокировка не сложна в c #, например, lock (someVariable) {...}) Создание копий растровых изображений (которые уже загружены в список внутри), поскольку их используют различные элементы управления, не должно занимать слишком много памяти / времени (так какбудет оперативной памяти).Сложность возникает, когда основное приложение должно передать этот класс «документа» всем дочерним элементам управления и формам.Как только каждый элемент управления узнает экземпляр «документа», любые дополнения к нему сразу становятся доступными.
B) Создайте некоторый класс, в котором список помечен как внутренний и статический, чтобы любой класс в вашем проекте мог его просматривать и использоватьЭто.Таким образом, вы используете своего рода «глобальный» массив, но не совсем глобальный.Он виден только внутри вашего проекта (из-за «внутреннего» тега) и по-прежнему содержится внутри класса.Обратите внимание, что вам все еще нужно использовать механизм блокировки C #, чтобы сделать все поточно-ориентированным.
Обратите внимание, что вместо прямого доступа к членам класса, вы можете подумать о написании методов для управления ими и соответствующей блокировки объектов.(Это была бы правильная практика программирования.) Для B просто создайте методы, помеченные как «внутренние» и «статические».
Я бы лично использовал B (намного быстрее реализовать и отладить), особенно дляпрототипирование, и, поскольку его использование делает не слишком трудным переход к A в будущем.
Кроме того, если вы используете подход (B) внутренних статических объектов и функций, вы можете написать некоторую функцию, такую какGetBitmap (строковый путь), который загружает изображения с диска, а также содержит буфер всех недавно загруженных изображений, так что потоки не должны загружаться с диска дважды.