我正在学习 c# 和 wpf。 我尝试从网络加载 img 并将其绑定(bind)到图像,但失败了。
它说“调用线程无法访问该对象,因为另一个线程拥有它”
但是我已经使用了“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;
});
}
最佳答案
您无法访问图像,因为您必须在 UI 线程中执行此操作。您可以创建一个私有(private)字段,并在构造函数中使用 _dispatcher = Dispatcher.CurrentDispatcher 进行设置。在您的 Task
中,您必须使用此调度程序并调用方法 Invoke
来设置您的图像。
更多信息:Dispatcher.CurrentDispatcher
关于WPF:调用线程无法访问此对象,因为不同的线程拥有它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42922338/