Есть несколько вопросов об этом уже на этом сайте и на других форумах, но я еще не нашел решение, которое действительно работает.
Вот что я хочу сделать:
- В моем приложении WPF я хочу загрузить изображение.
- Изображение выполняется из произвольного URI в Интернете.
- Изображение может быть в любом формате.
- Если я загружаю одно и то же изображение более одного раза, я хочу использовать стандартный интернет-кеш Windows.
- Загрузка и декодирование изображений должны происходить синхронно, но не в потоке пользовательского интерфейса.
- В конце концов, я должен закончить что-то, что я могу применить к <Image> источника.
Вещи, которые я пробовал:
- Использование WebClient.OpenRead() на BackgroundWorker. Прекрасно работает, но не использует кеш. WebClient.CachePolicy влияет только на этот конкретный экземпляр WebClient.
- Использование WebRequest для фонового работника вместо WebClient и настройка WebRequest.DefaultCachePolicy. Это правильно использует кеш, но я не видел примера, который не дает мне поврежденных изображений в полтора раза.
- Создание BitmapImage в BackgroundWorker, установка BitmapImage.UriSource и попытка обработки BitmapImage.DownloadCompleted. Кажется, что этот кеш использует кеш, если установлен BitmapImage.CacheOption, но, похоже, не удастся обработать DownloadCompleted, поскольку BackgroundWorker немедленно возвращается.
Я борется с этим без проблем в течение нескольких месяцев, и я начинаю думать, что это невозможно, но вы, вероятно, умнее меня. Как вы думаете?