2012-01-07 4 views
0

WP7에서 photochooser를 호출하는 코드가 있으며 그림이 2MB 이상인 경우 사용자에게 메시지 상자를 표시하려고합니다. 이 작업을 수행하려고하면 photochooser 작업이 백그라운드에서 실행되기 때문에 처리되지 않은 예외가 발생하기 시작합니다.Photochooser 작업 내에서 MessageBox를 호출하는 방법

void photoChooserTask_Completed(object sender, PhotoResult e) 
{ 
     if (e.ChosenPhoto != null) 
     { 
      ProgressBar.Visibility = Visibility.Visible; 

      image = _UploadImgeViewModel.ReadToEnd(e.ChosenPhoto); 
      if (image.Length < 16384) 
      { 
       BitmapImage bi = new BitmapImage(); 
       bi.SetSource(e.ChosenPhoto); 
       UserSession.ProfileImage = bi; 
       Session.PreviousImage = bi; 
       UserSession.isImageChanged = true; 
       UserSession.image = image; 
       UserSession.Uploadimage = image; 
       NavigationService.Navigated += new NavigatedEventHandler(navigateCompleted); 
      } 
      else 
      { 
       ProgressBar.Visibility = Visibility.Collapsed; 
       UserSession.isImageChanged = false; 
       UserSession.ProfileImage = null; 


       Dispatcher.BeginInvoke(() => MessageBox.Show("The message")); 
      } 
     } 
}  

#endregion 

이것은 백그라운드 작업을 다시 시작하는 것으로 표시하고 전경의 msg 상자 만 표시합니다. 몇 초 후에 앱이 다운됩니다. 도와 주시겠습니까?

+0

왜 백그라운드에서'PhotochooserTask'를 실행? 그리고 어떤 오류가 있습니까? – keyboardP

+0

포 그라운드로 완전히 돌아 오는 데 10 초가 걸리거나 앱이 종료됩니다. 여기에 표시 할 수있는 메시지 상자가 있으면 사용자가 인증을 실패합니다 (사용자가 10 초 동안 아무 것도 클릭 할 수 없기 때문에). 페이지가로드 될 때까지 기다려야합니다. –

+0

내 사진에서 사용자의 프로필 사진을 업로드하는 데 단순히 photoschooser 작업을 사용하고 있습니다. 그것을하는 동안, 나는 photoschooser가 배경에서 아직도 달리고있는 동안 심상이 2Mb 이상다는 것을 사용자에게 msg를 보여주고 싶다. 사실, MessageBox는 photochooser를 멈추고 다시 시작하는 것을 볼 수 있습니다 ... 그리고 진행률 표시 줄과 앱이 충돌합니다. 이 MessageBox를 제거하면 크래시가 표시되지 않습니다. –

답변

0

전경으로 완전히 돌아 오는 데 10 초가 걸리거나 앱이 종료됩니다. 여기에 표시 할 수있는 메시지 상자가 있으면 사용자가 인증을 실패합니다 (사용자가 10 초 동안 아무 것도 클릭 할 수 없기 때문에). 페이지가로드 될 때까지 기다려야합니다.

MessageBox를 표시해야하는 경우이 문제를 해결하려면 bool을 설정하고 페이지의로드 이벤트에서 확인하십시오.

void photoChooserTask_Completed(object sender, PhotoResult e) { if (e.ChosenPhoto != null) { ProgressBar.Visibility = Visibility.Visible; 

      image = _UploadImgeViewModel.ReadToEnd(e.ChosenPhoto); 
      if (image.Length < 16384) 
      { 
       BitmapImage bi = new BitmapImage(); 
       bi.SetSource(e.ChosenPhoto); 
       UserSession.ProfileImage = bi; 
       Session.PreviousImage = bi; 
       UserSession.isImageChanged = true; 
       UserSession.image = image; 
       UserSession.Uploadimage = image; 
       NavigationService.Navigated += new NavigatedEventHandler(navigateCompleted); 
      } 
      else 
      { 
       ProgressBar.Visibility = Visibility.Collapsed; 
       UserSession.isImageChanged = false; 
       UserSession.ProfileImage = null; 

//set flag 
       UserSession.ImageTooBig = true; 
      } 
     } 
    }  

    #endregion 


MyPage() 
{ 
//make sure you attach Loaded Event if not already 
Loaded += (s,e) => 
{ 
    if (UserSession.ImageTooBig) 
    { 
     UserSession.ImageTooBig = false; 
     MessageBox.Show("Sorry, the image exceeds 2 MB"); 
     } 
}; 
} 
+0

사진 선택기 작업 또는 카메라 작업에서 돌아 오면 페이지로드 이벤트가 trigerred되지 않습니다 ... 포커스 이벤트에서이 호출을 확인하겠습니다. –

1

차갑다. 이 문제를 해결할 수있는 아이디어가 있습니다. 해결 방법이 아닐 수도 있지만,이 방법으로는이 문제를 피할 수 있습니다. 버튼을 추가하고 버튼 클릭 이벤트에서 유효성 검사 프로세스를 수행하면됩니다. 탐색이 진행 중일 때는 메시지 상자를 표시 할 수 없으므로 다음은

코드입니다 :

void photoChooserTask_Completed(object sender, PhotoResult e) 
    { 
     if (e.ChosenPhoto != null) 
     { 
      ProcessSelectedImage(e.ChosenPhoto); 
     } 
    }  
    private void ProcessSelectedImage(Stream stream) 
    { 
     if (stream != null) 
     { 
      bi.SetSource(stream); 
      UserSession.ProfileImage = bi; 
      UserSession.PreviousImage = bi; 
      image = ConvertToImage.ReadToEnd(stream); 
      UserSession.image = image; 
      UserSession.Uploadimage = image; 

     } 
    } 



    private void UploadImage_Click(object sender, RoutedEventArgs e) 
    { 
     if (image.Length < 16384) 
     { 
      UserSession.isImageChanged = true; 
      UserSession.image = image; 
      UserSession.Uploadimage = image; 
      NavigationService.Navigate(new Uri("/Views/EditMyProfile.xaml", UriKind.Relative)); 

     } 
     else 
     { 

      UserSession.isImageChanged = false; 
      UserSession.ProfileImage = null; 
      UserSession.IsChangingProfilePicture = true; 
      MessageBox.Show(MessageContent.ImageUploadLengh); 

     } 
    } 

감사 카말

관련 문제