2014-09-19 2 views
0

나는 동일한 기능을 가진 2 가지 방법이있다. 벌레인가, 아니면 뭔가 빠졌는가? 두 번째가 비어있는 동안 URL이있는 첫 번째 버전은 그림과 정상 스트림을 제공합니다 http://icdn.lenta.ru/images/2014/09/17/10/20140917102331786/pic_ffa73ea27023b3e69b6cef4d068c0499.jpgInMemoryRandomAccessStream 잘못된 동작

UPD : 나는 16384 이하의 크기를 가진 파일이 위험에 노출되어 있음을 발견했습니다

. AsStreamForWrite 설명서에서이 16384 값을 발견했습니다. @Kiewic, 도 해결 방법을 제안했습니다. 아직도 그것이 작동하지 않는 이유를 알고 싶습니다.

UPD2 : Connect에서 bug report을 생성했습니다.

당신이 변수에 Stream을 지킬 때 의미가 있습니다
+0

AsStreamForWrite의 언어 프로젝션() 매우 추한입니다. WinRT 스트림은 .NET 스트림과 잘 맞지 않으므로 차이점을 설명하는 데 많은 코드가 필요합니다. 다른 종류의 스트림을 다루는 특수한 경우가 많으며 이전 전화 릴리스의 차이점을 숨기는 코드도 있습니다. 움직이는 부분이 너무 많으면 버그가 발생할 가능성이 큽니다. BitmapSource.SetSourceAsync()를 사용하면 많은 양의 메모리를 씹는 것을 피하는 것이 중요합니다. 작동하는 코드를 고수하는 것이 가장 좋습니다. –

+0

@HansPassant, 비 UI 스레드에서 BitmapImage를 만들 수 없습니다. – ixSci

+0

그냥 믿는다 : 대답이 필요 없다. Windows 런타임 유형을 .NET 클래스로 변환하는 데 필요한 모든 헬퍼를 사용하지 않으려면 가능한 모든 작업을 수행하십시오. 이유를 알고 싶다면 [이 스레드] (http://social.msdn.microsoft.com/Forums/windowsapps/en-US/37ac0ed7-1884-4251-9914-07fae6467b98/mediastreamsource-not-working- proper-in-windows-phone-81)로 끝납니다. Windows 런타임을 .NET으로 변환하는 것을 포기할 경우 무작위 OutOfMemoryExceptions를 포함한 많은 문제를 피할 수 있습니다. – Alovchin

답변

1

, 시도 :

// using System.Net.Http; 

private static async Task<IRandomAccessStream> _DownloadImage2(string url) 
{ 
    HttpClient http = new HttpClient(); 
    var httpStream = await http.GetStreamAsync(url); 
    var stream = new InMemoryRandomAccessStream(); 

    Stream streamForWrite = stream.AsStreamForWrite(); 
    await httpStream.CopyToAsync(streamForWrite); 

    stream.Seek(0); 
    Debug.WriteLine("Length: " + streamForWrite.Length); 
    Debug.WriteLine("Size: " + stream.Size); 

    return stream; 
} 
+0

이것은 실제로 도움이됩니다. 그러나 기본 버전이 작동하지 않는 이유는 답변하지 않습니다. 제발, 업데이트 된 게시물을 봐 – ixSci

관련 문제