ImageTools и Webclient - PullRequest
       2

ImageTools и Webclient

0 голосов
/ 05 декабря 2011

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

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

Это то, что я пытаюсь сделать.

WebClient wc = new WebClient();
wc.OpenReadAsync(Uri);

wc.OpenReadCompleted += delegate(object Sender, OpenReadCompletedEventArgs e){
        Logo = new BitmapImage();
        ExtendedImage hExtendedImage = new ExtendedImage();

        try
        {
                hExtendedImage.SetSource(e.Result);
                Logo.SetSource(hExtendedImage.ToStream());
        }
        catch (WebException)
        {

        }
};

, но теперь я получаю ошибку «изображение не загружено» из hExtendedImageв этой строке

Logo.SetSource(hExtendedImage.ToStream());

Я явно загружаю изображение из e.Result в hExtendedImage неправильно.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011
var client = new WebClient();

// Always define event handlers, 
// BEFORE calling any method that could invoke them.
client.OpenReadCompleted += (s1, e1)
{
    Logo = new BitmapImage();

    var extendedImage = new ExtendedImage();
    extendedImage.OnLoadingCompleted += (s2, e2)
    {
        // Invoke the dispatcher, so we're sure it's set on the UI thread.
        Dispatcher.BeginInvoke(new Action
        (
            () => Logo.SetSource(extendedImage.ToStream()))
        );
    };
    extendedImage.SetSource(e1.Result);
};

client.OpenReadAsync(Uri);
0 голосов
/ 06 декабря 2011

К сожалению, SetSource является ансайком.Используйте событие LoadingCompleted из hExtendedImage, чтобы установить источник логотипа. Будьте осторожны: ЗагрузкаЗавершенного обратного вызова не в потоке пользовательского интерфейса!Вы должны вызвать диспетчер, если хотите изменить элементы управления пользовательского интерфейса, такие как Image.

Из источника ExtendedBitmap на CodePlex:

 public void SetSource(Stream stream)
        {
            Contract.Requires<ArgumentNullException>(stream != null, "Stream cannot be null.");

            if (_uriSource == null)
            {
                LoadAsync(stream);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...