Я использовал событие BitmapImage.DownloadProgress, чтобы дождаться загрузки изображения при создании растрового изображения из URI. Для этого я могу использовать обработчик событий для проверки Image.ActualWidth / ActualHeight после завершения загрузки. Это отлично работает.
Но когда я загружаю изображение, выбранное пользователем на своем компьютере, DownloadProgress бесполезен.
Это работает для растровых изображений URI:
private void LoadImage(Uri uri)
{
this.ResetProgressImage();
BitmapImage image = new BitmapImage();
image.DownloadProgress += new EventHandler<DownloadProgressEventArgs>(LoadImageDownloadProgress);
image.UriSource = uri;
this.ImageFull.Source = image;
}
private void LoadImageDownloadProgress(object sender, DownloadProgressEventArgs e)
{
this.Dispatcher.BeginInvoke(delegate
{
this.ProgressImage.Value = e.Progress;
if (e.Progress == 100)
{
ImageHelper.Current.Width = Math.Round(this.ImageFull.ActualWidth);
ImageHelper.Current.Height = Math.Round(this.ImageFull.ActualHeight);
}
});
}
Но это не работает при получении BitmapImage из потока:
private void LoadImage(Stream stream)
{
this.ResetProgressImage();
BitmapImage image = new BitmapImage();
image.DownloadProgress += new EventHandler<DownloadProgressEventArgs>(LoadImageDownloadProgress);
image.SetSource(stream);
this.ImageFull.Source = image;
}
Кто-нибудь знает альтернативу DownloadProgress при использовании SetSource (stream)?