WP7 Mango中的相机捕捉

5

我最近将我的WP7应用程序升级到Mango版本,但是在使用相机时遇到了一些问题。下面的代码在7.0版本中可以正常工作,但是在7.1版本中完成处理程序在对话框显示之前就会触发,因此我无法捕获结果。拍照后,手机会显示“正在恢复...”,这在以前从未出现过。

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 文档似乎展示了我代码的一个变化,但我不再能够获取相机捕获任务的结果。

每当出现未处理的异常时,我会得到“正在恢复...”屏幕。 - axon
1个回答

5

假设你的样本来自于单一方法,我不会期望它在 Mango 之前起作用。

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版本


这段代码在模拟器上可以运行,但在我的手机(诺基亚Lumia 800)上无法运行。应用程序部署正常,但cct_Completed()事件处理程序立即触发(似乎跳过了相机捕获)。 - axon
我已经找到了问题所在:如果您运行应用程序时手机连接到PC上,CameraCaptureTask将会失败。也就是说,由于在连接到USB时相机被禁用,因此必须先将手机从USB断开,然后才能在应用程序中运行CameraCaptureTask。 - axon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接