У меня есть 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
, который я не знаю, как эффективно использовать.