首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在照片选择器任务中调用MessageBox

如何在照片选择器任务中调用MessageBox
EN

Stack Overflow用户
提问于 2012-01-07 12:15:12
回答 2查看 466关注 0票数 0

我有一个代码,我在WP7中调用photochooser,当图片大于2Mb时,我想向用户显示一个消息框。当我尝试这样做时,由于photochooser任务在后台运行,我们开始得到未处理的异常。

代码语言:javascript
复制
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框。几秒钟后,应用程序崩溃。你能帮我一下吗?

EN

回答 2

Stack Overflow用户

发布于 2012-01-08 06:46:30

凉爽的。我有一些想法来解决这个问题。可能不是一个修复方法,但是这样我们就可以避免这个问题。只需添加一个按钮,并在按钮单击事件中执行验证过程。因为我们不能在导航过程中显示消息框。

代码如下:

代码语言:javascript
复制
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);

        }
    }

谢谢卡迈勒

票数 1
EN

Stack Overflow用户

发布于 2012-01-08 02:29:20

您有10秒的时间完全返回前台,否则您的应用程序将被终止。如果您有一个可以在此处显示的消息框,那么您将无法通过认证(因为用户在10秒内无法单击任何内容) --您需要等待页面加载。

如果你需要显示一个布尔值,一种解决方法是设置一个布尔值,然后在页面的MessageBox事件中选中它。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8767303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档