WPF BitmapFrame и несколько потоков - PullRequest
1 голос
/ 09 февраля 2011

У меня есть PNG-файл, хранящийся в моем облаке в хранилище больших двоичных объектов, я хочу загрузить его и отобразить на экране в WPF.

Я знаю о Диспетчере и Замораживании, но ничего не работает. Я продолжаю получать сообщение об ошибке «другой поток владеет им».

Вот что у меня есть:

var decoder = GetDecoder("http://address/image.png");

Dispatcher.Invoke(DispatcherPriority.Send, new Action<BitmapFrame>(SetImage), decoder.Frames[0]);

public void SetImage(BitmapFrame source)
{
    var bitmapFrame = BitmapFrame.Create(source);  //ERROR HERE!!!!!!!!
    LazyImage.Source = bitmapFrame;
}

private BitmapDecoder GetDecoder(object uri)
{
    var extension = System.IO.Path.GetExtension((string)uri);
    BitmapDecoder decoder = null;
    if (extension.ToLower() == ".png")
        decoder = BitmapDecoder.Create(new Uri((string)uri, UriKind.Absolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
    return decoder;
}

Если я пытаюсь заморозить кадр [0], я получаю исключение о том, что этот кадр нельзя заморозить. Также декодер, возвращаемый BitmapDecoder.Create, равен не a PngBitmapDecoder, а LateBoundBitmapDecoder, который я не знаю, как эффективно использовать.

Ответы [ 2 ]

2 голосов
/ 28 января 2012

Вкратце: попробуйте обернуть результат в WriteableBitmap.

Длинная история, с кодом.

1 голос
/ 09 февраля 2011

Возможно ли, что вам нужно не только создать Bitmapframe в диспетчере, но и BitmapDecoder? Вы пытались вызвать GetDecoder у диспетчера?

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