【问题标题】:Unhandled exception thrown by PhotoChooserTaskPhotoChooserTask 抛出未处理的异常
【发布时间】:2013-08-07 13:53:27
【问题描述】:

我有这个代码,我用它来显示一个按钮,允许用户从他的库中选择一个图像并将其用作我的应用程序的背景。

所以我创建了一个PhotoChooserTask,将其设置为显示相机并将其绑定到任务完成时必须执行的方法。 该按钮将通过显示PhotoChooserTask 来启动任务。 完成后的操作非常简单,我只需设置一个布尔值并更新图像源。

PhotoChooserTask pct_edit = new PhotoChooserTask();
pct_edit.ShowCamera = true;
pct_edit.Completed += pct_edit_Completed;
Button changeImageButton = new Button { Content = "Change Image" };
changeImageButton.Tap += (s, e) =>
{
    pct_edit.Show();
};


void pct_edit_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            bi.SetSource(e.ChosenPhoto);
            IsRebuildNeeded = true;
        }
    }

问题是它不会显示PhotoChooserTask,但它会给我一个例外,带我去

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
    {
        if (Debugger.IsAttached)
        {
            Debugger.Break();
        }
    }

App.xaml.cs.

这看起来很奇怪,因为我在同一个班级还有另一个 PhotoChooserTask,而且这个工作正常。

这有什么问题?

VisualStudio 甚至不会告诉我异常是什么,因此无法弄清楚!

编辑:

刚刚发现调用的时候抛出异常

pct_edit.Show(); 

在按钮的点击事件中。

【问题讨论】:

    标签: c# .net windows-phone-8


    【解决方案1】:

    您应该将选择器定义为类中的一个字段。要求您具有 PhotoChooser 的页面范围。然后,您在构造函数中订阅它。这在MSDN here

    上有说明
    class SomeClass
    {
       readonly PhotoChooserTask pct_edit = new PhotoChooserTask();
    
       SomeClass()
       {
           pct_edit.ShowCamera = true;
           pct_edit .Completed += new EventHandler<PhotoResult>(pct_edit_Completed);
       }
    }
    

    【讨论】:

    • 这就是我已经在做的事情(我没有粘贴整个班级,但任务被声明为我班级中的一个字段)。问题是如果我从按钮内部调用它,任务将无法工作
    • 您是否尝试过显示来自不同事件的任务?也许问题实际上出在您的按钮上。
    • 我已将事件从 Tap 更改为 Click,但没有任何变化。任务显示但抛出异常,导致应用崩溃,因此任务无法完成
    • 我的意思是您的应用程序中的另一个事件未链接到按钮。您是否尝试过围绕 show 方法包装调度程序调用?我没有在 MSDN 中看到它,但您可能必须在 UI 线程上才能显示选择器。
    • 知道了。如果在链接到按钮的事件之外调用,该任务实际上可以工作。但我仍然不明白按钮有什么问题
    【解决方案2】:

    您可以使用try查看问题所在

    changeImageButton.Tap += (s, e) =>
    {
        try
        {
           PhotoChooserTask pct_edit = new PhotoChooserTask();
           pct_edit.ShowCamera = true;
           pct_edit.Completed += (s,e) =>
           {
               if (e.TaskResult == TaskResult.OK)
               {
                  var bi = new BitmapImage() // maybe you didn't initialize bi?
                  bi.SetSource(e.ChosenPhoto);
                  IsRebuildNeeded = true;
               }
           }
           pct_edit.Show();
        }
        catch (Exception ex)
        {
           Message.Show(ex.Message);
        }
    };
    

    Message 上设置刹车点,然后您可以检查ex 中的所有内容。

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多