Как получить свойство finalUri из результата поиска асинхронного изображения? - PullRequest
1 голос
/ 04 августа 2011

В Windows Phone 7 я делаю простой асинхронный поиск, чтобы найти изображение по URI и установить возвращенный двоичный файл в качестве источника для управления изображением.

public object SetImageFromUri(string uri)
{
    var wc = new WebClient();
    wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
    wc.OpenReadAsync(new Uri(uri), wc);

    return null;
}

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    if (e.Error == null && !e.Cancelled)
    {
            var image = new BitmapImage();
            image.SetSource(e.Result);

            //e.Result has a property in the memory stream labeled finalUri
            //someImageControl.Source = image;

    }
}

Мой вопрос - как я могуизвлеките конечное свойство uri из e.Result, чтобы я мог видеть, с каким элементом управления изображения он связан

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

Вместо того, чтобы передавать WebClient в качестве второго параметра, передайте Uri (или некоторую другую информацию о состоянии полезного файла)

wc.OpenReadAsync(new Uri(uri), uri);

Вы можете получить доступ к этому в обратном вызове

var uri = (string)e.UserState;
1 голос
/ 04 августа 2011

Вы также можете просто привязать непосредственно к изображению и использовать LowProfileImageLoader , чтобы избежать блокировки потока пользовательского интерфейса во время загрузки.(Не забудьте установить изображение FallBack)

1 голос
/ 04 августа 2011

Из-за определенных ограничений, реализованных в механизме «Отражение», вы не можете получить доступ к внутреннему контенту из изолированного кода. В конечном итоге вы хотели бы использовать что-то вроде этого:

FieldInfo f = e.Result.GetType().GetField("_finalUri", BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Instance);
Uri n = (Uri)f.GetValue(e.Result);

Однако это вызовет FieldAccessException. Если вы не используете URI перенаправления, вы можете просто повторно использовать параметр, который изначально передается вашему методу. Если нет, вам нужно проверить HttpWebRequest и следовать идее , которую я обрисовал пару дней назад .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...