Это не только с большим количеством изображений. Достаточно одного большого изображения, чтобы задержать рендеринг, пока оно не было загружено, и это может быть заметно, когда размеры вашего изображения начинают увеличиваться в тысячах.
Я согласен с вами, что это, вероятно, поток рендеринга: я провел тест, и поток пользовательского интерфейса все еще успешно отправлял сообщения, пока происходила задержка рендеринга из-за попытки отобразить полностью предварительно кэшированный BitmapImage.
Это должно быть что-то вроде преобразования или подготовки изображения, как вы спекулировали. Я пытался смягчить это в своем приложении, «рендеринг», но скрывая изображение, а затем раскрывая его, когда мне нужно показать его. Однако это далеко не идеально, потому что в любом случае происходит зависание при рендеринге.
(Изменить)
Некоторое продолжение: после обсуждения псевдонима MS WPF я обнаружил, что вызывает задержки. На моей машине с Server 2008 это была комбинация старых видеодрайверов, которые не поддерживают новую модель драйвера WDDM, и задержка для изменения размера изображения.
Если размер исходного изображения отличается от размера дисплея, это приведет к задержке потока рендеринга, прежде чем изображение появится. По умолчанию для изображения установлено высочайшее качество, но вы можете изменить параметры масштабирования для рендеринга, вызвав RenderOptions.SetBitmapScalingMode(uiImage, BitmapScalingMode.LowQuality);
. Как только я это сделал, загадочное замораживание перед отображением изображения прошло. Альтернативой, если вам не нравится падение качества при масштабировании, является загрузка BitmapImage с DecodePixelWidth / Height, равным размеру, при котором оно будет отображаться. Затем, если вы загрузите BitmapImage в фоновом потоке, вы не должны задерживаться при его отображении.