2012-06-15 6 views
1

웹 사이트에서 이미지의 높이와 너비를 가져 오려고하지만 이미지가 아직 다운로드되지 않았으므로 항상 0을 반환하므로 다음 코드를 사용하고 여전히 이미지와 didnt 한 작업에만 방법 종료 후 다운로드가 시작됩니다, 그래서 사람이 어떤 대안이나 메트로 스타일 앱에서 지원이에 대한 수정이 있습니까C에서 이미지의 높이와 너비를 얻는 방법

someMethod 
    {  
    foreach(string imagepath in paths){ 
    IsDownloaded = false; 
    image = new BitmapImage(new Uri(imagepath)); 
    image.ImageOpened += image_ImageOpened; 
    while (!IsDownloaded) ; 
    /// code that will use image.PixelHeight only if it satisfy a condition then break 
    } 

    private void image_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     IsDownloaded = true; 
    } 

을 걸

+0

파일 정보 정보를 얻을 수있는 방법을 방법이 있습니다. http://msdn.microsoft.com/en-us/library/6yk7a1b0.aspx –

+0

경고를 참고하십시오. 어떤 이유로 든 이미지를 다운로드하지 못하면 코드가 무기명으로 'while (! IsDownloaded)'에 표시됩니다. . 이미지를 다운로드하고 성공적으로 디코딩 할 때만 발생하는 ImageOpened 핸들러에 코드를 넣는 것이 훨씬 좋습니다. – paul

답변

4

당신은 비동기 프로그래밍을 사용할 수 없습니다 like that - 다음 라인 삭제 :

while (!IsDownloaded) ; 

image_ImageOpened 방법 안에 모든 것을 넣으십시오. 일반적으로 이것을 '체인'이라고 부릅니다. 비동기 메서드가 많은 경우에는 각 비동기 메서드를 완료 한 후에 처리를 계속해야합니다.

점점 너비/높이의 내 자신의 코드에서 예 :

 BitmapImage imageSource = new BitmapImage(); 
     private void getImage() 
     { 
      Uri uir= new Uri("PATH", UriKind.Absolute); 
      imageSource.ImageOpened += new EventHandler<RoutedEventArgs>(imageopenened); 
     } 

     void imageopened(object sender, RoutedEventArgs e) 
     { 
      HEIGHT = ImageSource.PixelHeight; 
      WIDTH = ImageSource.PixelWidth; 
     ... 
     } 
+0

이벤트 핸들러를 사용하면 어떻게 매개 변수를 전달할 수 있습니까? orginial 메서드에 존재하는 일부 속성을 변경해야 할 필요가 없기 때문에 – EsoHasInsomnia

+0

@EsoHasInsomnia 무엇을 변경해야합니까? EventArgs 객체에는 필요한 것을 포함 할 수 있습니다. 그렇지 않으면 다른 객체로 변경해야 할 경우 클래스의 특정 객체를 만들 수 있습니다. – Erix

+0

루프 앞에 평가 된 액세스해야하는 문자열 배열이 있습니다. 문자열은 내가 그것을 수정해야합니다 나는 그것에 참조 된 메서드에 전달 된 참조가 있습니다. – EsoHasInsomnia

관련 문제