PhotoChooserTask引发的未处理exception

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

所以我创建了一个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甚至不会告诉我什么是exception,所以没有办法搞清楚!

编辑:

我刚刚发现,当我打电话时会抛出exception

 pct_edit.Show(); 

在按钮的点击事件中。

您应该将选择器定义为class级中的一个字段。 您需要具有PhotoChooser的页面范围。 然后在构造函数中订阅它。 这在MSDN上说明

 class SomeClass { readonly PhotoChooserTask pct_edit = new PhotoChooserTask(); SomeClass() { pct_edit.ShowCamera = true; pct_edit .Completed += new EventHandler(pct_edit_Completed); } } 

您可以使用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 ,然后你可以检查前面的所有内容。