Как перевести URL в BitMapImage асинхронно
У меня есть ссылка. Есть функция, в которую передается эта ссылка. Она возвращает битмап, но не асихнронно, из за чего UI зависает. Как сделать это асинхронно, без конвертера в отдельном классе.
public async Task<BitmapImage> converter(string url)
{
var bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(url);
bi.EndInit();
return bi;
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Берем какой-нибудь класс и реализуем на нем INotifyPropertyChanged
using System.ComponentModel;
using System.Runtime.CompilerServices;
public class NotifyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Наследуем от него еще один какой-нибудь класс и добавляем в него свойство-ссылку
public class MyClass : NotifyPropertyChanged
{
private string url;
public string Url
{
get => url;
set
{
url = value;
OnPropertyChanged();
}
}
}
Модель данных готова. С такой модели интерфейс умеет обновляться сам через привязку данных.
В XAML
<Image Source="{Binding Url}"/>
Теперь в коде окна
public partial class MainWindow : Window
{
private readonly MyClass data;
public MainWindow()
{
InitializeComponent();
data = new MyClass();
DataContext = data;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
data.Url = "https://ссылка";
}
}
Вот так ничего виснуть не будет.