2013-08-07 295 views
4

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

因此,我创建了一个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(); 

抛出异常。

回答

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); 
    } 
} 
+0

这就是我已经做的事情(我没有粘贴整个班级,但是任务被宣布为我班的一个领域)。问题是,如果我从按钮内部调用该任务,该任务将不起作用 – StepTNT

+0

您是否试图显示来自其他事件的任务?也许问题实际上是用你的按钮。 – steveg89

+0

我已将事件从“点按”更改为“点击”,但没有任何更改。该任务显示,但引发异常,使应用程序崩溃,所以任务不能完成 – StepTNT

1

说你可以用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); 
    } 
}; 

戴上brakepoint上Message,那么你可以检查里面ex一切。

相关问题