Как вызвать MessageBox в рамках задачи Photochooser - PullRequest
0 голосов
/ 07 января 2012

У меня есть код, по которому я вызываю фотохудожника в WP7, и я хочу показать пользователю окно сообщения, когда размер снимка превышает 2 МБ.Когда я пытаюсь сделать это, поскольку задача photochooser выполняется в фоновом режиме, мы начинаем получать необработанные исключения.

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 на переднем плане.и через несколько секунд приложение вылетает.Не могли бы вы помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 08 января 2012

Cool. У меня есть идея, чтобы решить эту проблему. Не может быть исправлением, но таким образом мы можем избежать этой проблемы. Просто добавьте кнопку и выполните процедуру проверки в событии нажатия кнопки. Так как мы не можем отобразить окно сообщения, когда идет навигация.

Ниже приведен код:

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

        }
    }

Спасибо Камаль

0 голосов
/ 07 января 2012

У вас есть 10 секунд, чтобы полностью вернуться на передний план, иначе ваше приложение будет убито. Если у вас есть окно сообщения, которое может отображаться здесь, вы не пройдете сертификацию (поскольку пользователь не мог ничего щелкнуть в течение 10 секунд) - вам нужно подождать, пока страница загрузится.

Обходной путь для этого, если вам нужно показать MessageBox, - установить bool и проверить его в событии Loaded страницы.

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");
      }
};
}
...