У меня есть таймер, и на каждом тике я хочу взять файл изображения из памяти и изменить изображение, которое отображается в Image, с помощью этого фрагмента кода.
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Render,
new Action(() =>
{
ms.Seek(0, SeekOrigin.Begin);
e.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.CacheOption = BitmapCacheOption.None;
bitmapImage.EndInit();
CameraImageBox.BeginInit();
CameraImageBox.Source = bitmapImage;
CameraImageBox.EndInit();
bitmapImage = null;
ms.Flush();
}));
Элемент управления Image становится черным как смоль после пары десятков изображений, и весь пользовательский интерфейс перестает отвечать на запросы. Использование памяти достигает колоссального 1 гигабайта, я предполагаю, что кеш рендеринга элементов управления изображением не освобождается, поскольку e.Image является статическим ресурсом, который каждый раз перерисовывается.
Есть ли лучший способ сделать это, например, отобразить изображение в Rectangle или вручную освободить кеш?