2011-05-28 116 views
5

我最近將我的WP7應用程序升級爲芒果,並且遇到了相機問題。下面的代碼用於處理7.0,但是在7.1中完成的處理程序在對話框甚至顯示之前觸發,所以我無法捕獲結果。拍完照片後,手機顯示「恢復...」,它從來沒有用過。WP7中的攝像頭捕獲芒果

var dlg = new CameraCaptureTask(); 
      dlg.Completed += (s, e) => 
      { 
       if (e.TaskResult == TaskResult.OK) { 
        BitmapImage bmp = new BitmapImage(); 
        bmp.SetSource(e.ChosenPhoto); 
        //var img = new Image(); 
        //img.Source = bmp; 

        string caption = string.Empty; 
        var inputDialog = new InputPrompt() 
        { 
         Title = "Caption", 
         Message = "Enter caption/description for snapshot", 
        }; 
        inputDialog.Completed += (ss, ee) => 
               { 
                if (ee.PopUpResult == PopUpResult.Ok) 
                { 
                 caption = ee.Result; 

                 var snap = SnapshotBLL.AddSnapshot(recipeId, bmp, caption); 
                 onComplete(null, new SnapshotEventArgs(snap)); 
                } 
               }; 
        inputDialog.Show(); 
       } 
      }; 
      dlg.Show(); 

MSDN文檔似乎顯示我的代碼的變體,但我不能再獲取相機捕獲任務的結果。

+0

我得到的 「恢復...」 屏幕每當未處理的異常被拋出。 – axon 2012-05-03 05:15:44

回答

5

假設您的樣品來自單一方法,我不會指望它在芒果前工作。

應該創建CameraCaptureTask,並在頁面的構造函數中分配回調使其正常工作。
喜歡的東西:

public partial class MainPage : PhoneApplicationPage 
{ 
    private CameraCaptureTask cct = new CameraCaptureTask(); 

    public MainPage() 
    { 
     InitializeComponent(); 

     cct.Completed += new EventHandler<PhotoResult>(cct_Completed); 
    } 

    private void cct_Completed(object sender, PhotoResult e) 
    { 
     // Do whatever here 
    } 

    private void SomeEventHandler(object sender, RoutedEventArgs e) 
    { 
     cct.Show(); 
    } 
} 

這個工作在兩個7.0 & 7.1

+0

此代碼適用於模擬器,但不適用於我的手機(諾基亞Lumia 800)。該應用程序部署良好,但cct_Completed()事件處理程序立即觸發(看似完全跳過相機捕獲)。 – axon 2012-05-03 05:14:55

+0

我發現我的問題:如果您的手機在運行應用程序時連接到PC,CameraCaptureTask將會失敗。即由於相機在插入USB時被禁用,因此您的手機必須斷開USB連接才能在您的應用中運行CameraCaptureTask。 – axon 2012-05-03 05:26:39