我正在学习c#和wpf。 我试图从网上加载一个img并将其绑定到一个图像,但失败了。
它说“调用线程无法访问此对象,因为另一个线程拥有它”
但是我已经使用了“Img1.Dispatcher.Invoke()”,为什么它会再次出现这个异常呢?
private void Window_ContentRendered(object sender, EventArgs e)
{
Img1.Dispatcher.Invoke(async () =>
{
Img1.Source = await DownloadImg("http address");
});
}
private Task<ImageSource> DownloadImg(string url)
{
return Task.Run(() =>
{
ImageSource source = new BitmapImage(new Uri(url));
return source;
});
}
答案 0 :(得分:2)
您无法访问Image,因为您必须在UI线程中执行此操作。您可以创建一个私有字段,并在构造函数中使用_dispatcher = Dispatcher.CurrentDispatcher
进行设置。在Task
中,您必须使用此调度程序并调用方法Invoke
来设置您的图像。
更多信息:Dispatcher.CurrentDispatcher