Скачать изображение с сервера - PullRequest
1 голос
/ 30 мая 2011


Я должен загрузить изображение с сервера по нажатию кнопки.Код:

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);
    }

Проблема, с которой я сталкиваюсь, заключается в том, что впервые данные загружаются с сервера и отображаются правильно.Тем не менее, если я выйду из приложения и снова запуском его, оно загружает старое изображение, даже если я удалил изображение с сервера или изменил его.Я думаю, что изображение куда-то кешируется, но не знаю, как решить эту проблему.

Ответы [ 3 ]

1 голос
/ 30 мая 2011

Наконец-то удалось это исправить.
Единственное изменение, которое было сделано:

<code>
w.OpenReadAsync(new Uri("<a href="http://example.com/xxx/image.png?q=" rel="nofollow">http://example.com/xxx/image.png?q=</a>"+Guid.NewGuid()));
1 голос
/ 30 мая 2011

Я думаю, что это будет так же, как ваша проблема:

Как отключить кэширование с помощью WebClient и Windows Phone 7

Я не заметил такого поведенияпри использовании HttpWebRequest для получения данных.Но я не уверен в этом.

Обновление: HttpWebRequest имеет по умолчанию то же поведение, но может быть отключено.В этом посте говорится о возможных вариантах: http://www.nickharris.net/2010/10/windows-phone-7-httpwebrequest-returns-same-response-from-cache/

0 голосов
/ 31 мая 2011

Вы также можете использовать 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);
        }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...