Вот проблема.У меня есть вид, который должен отображать изображение и некоторые элементы управления.Пользователь добавляет новые изображения, изменяет некоторые параметры и нажимает кнопку «Готово».Изображения большие и очень большие (400-1500 МБ Tiff). Пользователь должен видеть предварительный просмотр изображения, но это нормально, если оно загружается в течение 10-15 секунд или даже больше, у него есть работа на это время.Изображение привязывается через шаблон MVVM
как простая строка (файл всегда будет в локальной папке)
<Image Name="ImagePreview" Source="{Binding SFilePathForPreview,
FallbackValue={StaticResource DefaultImage},
TargetNullValue={StaticResource DefaultImage}}"
HorizontalAlignment="Center" Width="200" Height="200"
VerticalAlignment="Center" />
Проблема в том, что все зависает, когда пользователь пытается добавить файл для загрузки.Я понимаю, что этот случай должен быть решен с помощью многопоточности - но понятия не имею, как это реализовать.
Я пытался обновить изображение из представления в другой теме, например:
Thread newThread = new Thread(LazyLoad);
newThread.Name = "LazyLoad";
newThread.Start(SFilePathForPreview);
public void LazyLoad(object SFilePath)
{
try
{
string path = (string)SFilePath;
BitmapImage t_source = new BitmapImage();
t_source.BeginInit();
t_source.UriSource = new Uri(path);
t_source.DecodePixelWidth = 200;
t_source.EndInit();
t_source.Freeze();
this.Dispatcher.Invoke(new Action(delegate
{
ImagePreview.Source = t_source;
}));
}
catch
{
//...
}
}
Но все равнов точке
ImagePreview.Source = t_source;
все зависает до полной загрузки изображения.
Есть ли способ загрузить предварительный просмотр вфон и показать это без этих ужасных зависаний?