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,您仍然需要向请求添加额外的头以禁用缓存。