wpf

2013-08-09 5 views
0

의 C#을 사용하여 인증 된 서버에서 이미지를 다운로드 할 수 없습니다. 다음 코드를 사용하여 서버에서 이미지를 다운로드했지만 실패했습니다. 이 문제는 이미지가 완전히 다운로드되기 전에 응답 스트림을 닫는 것입니다 서버 인증이wpf

private BitmapImage getimage (string uri) 
    { 


     var webRequest = WebRequest.Create(uri);//making a variable webrequest, 
     webRequest.Credentials = new NetworkCredential("user", "password");//credential is using for authentication 
     using (var webResponse = webRequest.GetResponse())//use for stucking problem of button 
     { 
      using (var responseStream = webResponse.GetResponseStream()) 
      { 
       BitmapImage img = new BitmapImage(); 
       img.BeginInit(); 
       img.StreamSource = responseStream; 
       img.EndInit(); 
       return img; 

      } 
     } 


    } 
+0

예외가 발생합니까? – Nitesh

답변

1

도와주세요 사용하고 있습니다. 완전히 다운로드되었는지 확인하기 위해 중간 MemoryStream에 복사 할 수 있습니다. 또한 EndInit 바로 뒤에 스트림을 닫으려는 경우 BitmapCacheOption.OnLoad 플래그를 설정해야합니다. 자세한 내용은 BitmapImage.StreamSource의 설명 섹션을 참조하십시오.

using (var webResponse = webRequest.GetResponse()) 
using (var responseStream = webResponse.GetResponseStream()) 
using (var memoryStream = new MemoryStream()) 
{ 
    responseStream.CopyTo(memoryStream); 
    BitmapImage img = new BitmapImage(); 
    img.BeginInit(); 
    img.CacheOption = BitmapCacheOption.OnLoad; 
    img.StreamSource = memoryStream; 
    img.EndInit(); 
    return img; 
} 

또는 당신은 이미지가 완전히 다운로드 될 때까지 WebResponse를의 폐쇄를 지연 할 수있다. BitmapImage는 이와 같은 목적으로 DownloadCompletedDownloadFailed 이벤트 처리기를 제공합니다. WebResponse를 닫으면 응답 스트림도 닫힙니다.

var webResponse = webRequest.GetResponse(); 
var img = new BitmapImage(); 
img.DownloadCompleted += (o, e) => webResponse.Close(); 
img.DownloadFailed += (o, e) => webResponse.Close(); 
img.BeginInit(); 
img.StreamSource = webResponse.GetResponseStream(); 
img.EndInit(); 
return img;