Image 从服务器下载图像
Image 从服务器下载图像,image,windows-phone-7,Image,Windows Phone 7,我必须在单击按钮时从服务器下载图像。 代码是: private void Button_Click(object sender, RoutedEventArgs e) { (sender as Button).IsEnabled = false; progressbar.IsIndeterminate = true; WebClient w = new WebClient(); w.OpenReadAsync(new Uri
我必须在单击按钮时从服务器下载图像。 代码是:
private void Button_Click(object sender, RoutedEventArgs e)
{
(sender as Button).IsEnabled = false;
progressbar.IsIndeterminate = true;
WebClient w = new WebClient();
w.OpenReadAsync(new Uri("http://example.com/xxx/image.png"));
w.OpenReadCompleted += new OpenReadCompletedEventHandler(w_OpenReadCompleted);
}
void w_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
progressbar.IsIndeterminate = false;
BitmapImage b = new BitmapImage();
b.SetSource(e.Result);
Image img = new Image();
img.Source = b;
LayoutRoot.Children.Add(img);
}
我面临的问题是,第一次从服务器下载数据并正确显示。但是,如果我退出应用程序并再次启动它,它将下载旧映像,即使我已从服务器上删除了映像或更改了映像。我认为图像正在缓存到某个地方,但不知道如何解决此问题。我认为这与您的问题相同: 在使用HttpWebRequest获取数据时,我没有注意到这种行为。但我不确定 更新:HttpWebRequest默认具有相同的行为,但可以禁用。这篇博文是关于你的选择:
我认为这与您的问题相同: 在使用HttpWebRequest获取数据时,我没有注意到这种行为。但我不确定 更新:HttpWebRequest默认具有相同的行为,但可以禁用。这篇博文是关于你的选择:
终于解决了问题。
唯一的改变是:
w.OpenReadAsync(new Uri("http://example.com/xxx/image.png?q="+Guid.NewGuid()));
w、 OpenReadAsync(新Uri(“+Guid.NewGuid());
最终成功修复了它。
唯一的更改是:
w.OpenReadAsync(new Uri("http://example.com/xxx/image.png?q="+Guid.NewGuid()));
w、 OpenReadAsync(新Uri(“+Guid.NewGuid());
您还可以使用HttpWebRequest下载每个请求的新数据。下面是一个设置异步调用的简单类
下面是一个简单的http客户端,它将从给定的uri下载数据
public static class HttpClient
{
public static void Execute(Uri uri, Action<HttpWebRequest> onrequest, Action<HttpWebResponse> onresponse)
{
var request = HttpWebRequest.CreateHttp(uri);
onrequest(request);
request.BeginGetResponse
(
result =>
{
try
{
if (request.HaveResponse)
onresponse((HttpWebResponse)request.EndGetResponse(result));
}
catch { }
},
null
);
}
}
您还可以使用HttpWebRequest在每个请求中下载新数据。下面是一个设置异步调用的简单类
下面是一个简单的http客户端,它将从给定的uri下载数据
public static class HttpClient
{
public static void Execute(Uri uri, Action<HttpWebRequest> onrequest, Action<HttpWebResponse> onresponse)
{
var request = HttpWebRequest.CreateHttp(uri);
onrequest(request);
request.BeginGetResponse
(
result =>
{
try
{
if (request.HaveResponse)
onresponse((HttpWebResponse)request.EndGetResponse(result));
}
catch { }
},
null
);
}
}
这段代码仍然存在缓存问题。如果您使用HttpWebRequest,您仍然需要向请求添加额外的头以禁用缓存。此代码仍然存在缓存问题。如果使用HttpWebRequest,您仍然需要向请求添加额外的头以禁用缓存。