2011-05-28 108 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