2012-01-07 9 views
0

私はWP7でphotochooserを呼び出すコードを持っています.Picが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

私は単にフォトチョイスタスクを使用して、自分のアプリのユーザーのプロフィールimgをアップロードしています。これを実行している間、フォトチョーザがまだバックグラウンドで動作している間に、イメージが2Mb以上であることをユーザに示すメッセージを表示したい。実際には、MessageBoxはフォトチューザーを停止し、私はちょうど再開して...そして進行状況バーが後ろに見えて、アプリケーションがクラッシュします。この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になりません... Focusイベントでこれを呼び出すことを確認しましょう。 –

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); 

     } 
    } 

おかげ カマル

関連する問題