BLOB 저장소의 클라우드에 PNG 파일이 저장되어 있으므로 다운로드하고 WPF의 화면에 렌더링하고 싶습니다.WPF BitmapFrame 및 다중 스레드
Dispatcher 및 Freezing에 대해 알고 있지만 아무 것도 작동하지 않습니다. "다른 스레드가 소유하고있다"라는 오류가 계속 발생합니다. 여기
내가 무엇을 가지고 :
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
에 의해 반환 된 디코더는
이 아니며은
PngBitmapDecoder
이 아니지만 실제로 사용하는 방법을 잘 모르는
LateBoundBitmapDecoder
입니다.
아마도, I는 디코더의 창조가 I는 UI 스레드에서 발생 방지하고자하는 것을 의미 동기 동작 생각한다. Decoder가'PngBitmapDecoder'이므로 내 로컬 PC의 파일 (http URL이 아닌)이 그대로 작동합니다. – Mark
음 ... 아마도 스레드에서 BitmapFrame.Create()를 호출하여 반환하는 프레임을 고정하려면? – Lugoues
LateBoundBitmapDecoder에서 반환 한 프레임을 고정하면 예외가 발생하지만 로컬 URL (따라서 PngBitmapDecoder)을 사용하면 고정시킬 수 있습니다. – Mark