【发布时间】:2017-10-12 12:16:06
【问题描述】:
我正在尝试异步加载图像。
主窗口代码
public partial class MainWindow : Window
{
private Data data = new Data();
public MainWindow()
{
InitializeComponent();
this.DataContext = data;
}
private async void button_Click(object sender, RoutedEventArgs e)
{
data.Image = await Data.GetNewImageAsync();
}
}
数据类
public class Data : INotifyPropertyChanged
{
private BitmapImage _Image = new BitmapImage();
public BitmapImage Image { get { return _Image; } set { _Image = value; OnPropertyChanged("Image"); } }
public static BitmapImage GetNewImage()
{
return new BitmapImage(new Uri("http://www.diseno-art.com/news_content/wp-content/uploads/2012/09/2013-Jaguar-F-Type-1.jpg"));
}
public async static Task<BitmapImage> GetNewImageAsync()
{
return await Task.Run(() => GetNewImage());
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
WPF 代码
<Button Name="button" Click="button_Click">Image</Button>
<Image Grid.Row="1" Source="{Binding Path=Image, UpdateSourceTrigger=PropertyChanged}"></Image>
问题
我得到了例外:
System.ArgumentException:“必须在同一个线程上创建 DependencySource 作为 DependencyObject。”
... 在这一行:
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
但是,如果我将 BitmapImage 更改为字符串,则此代码可以正常工作。
我做错了什么?
【问题讨论】:
-
请注意,在图像绑定上设置
UpdateSourceTrigger=PropertyChanged是没有意义的。它只对 TwoWay 和 OneWayToSource 绑定有影响。
标签: c# wpf asynchronous