我正在尝试在我的 wpf 应用程序中从 Web 加载图像。
思路如下: 当我点击一个按钮时,会出现一个带有附加信息的弹出窗口。在这个弹出窗口中,我使用了一些来自网络的图片。
问题: 加载弹出窗口时,系统会在等待图像时挂起。我有约束力 我的代码后面的图像。图像存储在 ObservableCollection 中。我试过了 使用一个线程来加载图像,但每次我遇到一个异常,说该线程不是对象的所有者。
我尝试使用 Invoke 将下载的图像获取到 UserinterfaceThread,但我无法访问它。我的代码如下:
IList<Image> imagesFromWeb = downloadImagesFromWeb(url);
DispatcherHelper.UIDispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate()
{
foreach (Image img in imagesFromWeb
{
this.ObservableCollection_Images.Add(img);
}
}
一旦下载了图像并尝试将图像添加到(已经打开的)弹出窗口中,我得到异常提示线程 不是对象的所有者
有人可以指出我正确的方向吗?
最佳答案
如果您在可以使用普通 HTTP URI 寻址的公共(public) Web 服务器上有可用的图像,那么您可以直接将源设置为该图像:
<Image Source="http://www.someserver.com/myimage.png" />
WPF 会负责下载它——我认为它甚至会异步执行,尽管我不是 100% 确定。
您当然也可以使用数据绑定(bind)来做到这一点:
<Image Source="{Binding TheImage}" />
在 View 模型中
public string TheImage
{
get { return "http://www.someserver.com/myimage.png"; }
}
关于c# - 在 wpf/surface 中从网络加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223218/