2013-08-07 188 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一切。

相關問題