我要点击按钮从服务器下载图像。
代码是:
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);
}
我面临的问题是,第一次从服务器下载数据并正确显示。但是,如果我退出应用程序并再次启动它,即使我已从服务器删除了图像或更改了图像,它也会下载旧图像。我认为图像在某处缓存但不知道如何解决这个问题。
答案 0 :(得分:1)
我认为这与您的问题相同:
How do you disable caching with WebClient and Windows Phone 7
使用HttpWebRequest获取数据时,我没有注意到这种行为。但我不确定。
更新:默认情况下,HttpWebRequest具有相同的行为,但可以禁用。这篇博文正在谈论你有的选择: http://www.nickharris.net/2010/10/windows-phone-7-httpwebrequest-returns-same-response-from-cache/
答案 1 :(得分:1)
答案 2 :(得分:-1)
您还可以使用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
);
}
}
将HttpClient与您的按钮点击事件一起使用
private void Button_Click(object sender, RoutedEventArgs e)
{
(sender as Button).IsEnabled = false;
progressbar.IsIndeterminate = true;
HttpClient.Execute
(
new Uri(http://example.com/xxx/image.png),
request =>
{
request.UserAgent = "Custom HTTP Client";
},
response =>
{
progressbar.IsIndeterminate = false;
BitmapImage b = new BitmapImage();
b.SetSource(response.GetResponseStream());
Image img = new Image();
img.Source = b;
LayoutRoot.Children.Add(img);
}
);
}