Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 导航到新选项卡时调用异步函数_Ios_Xamarin_Xamarin.forms_Ios Camera - Fatal编程技术网

Ios 导航到新选项卡时调用异步函数

Ios 导航到新选项卡时调用异步函数,ios,xamarin,xamarin.forms,ios-camera,Ios,Xamarin,Xamarin.forms,Ios Camera,当用户导航到我的一个选项卡页面时,我试图立即显示James Montemagno的媒体选择器。我找到了一个名为OnAppearing()的函数,我试图重写该函数以创建此结果。虽然从技术上讲,当我切换选项卡时,它会立即显示摄像头,但在我关闭媒体选择器后,我会收到一条错误消息:“一次只能激活一个操作” 以下是我尝试实现此功能的方式: protected override async void OnAppearing() { TakePhotoButton_Clicked();

当用户导航到我的一个选项卡页面时,我试图立即显示James Montemagno的媒体选择器。我找到了一个名为OnAppearing()的函数,我试图重写该函数以创建此结果。虽然从技术上讲,当我切换选项卡时,它会立即显示摄像头,但在我关闭媒体选择器后,我会收到一条错误消息:“一次只能激活一个操作”

以下是我尝试实现此功能的方式:

protected override async void OnAppearing()
    {
        TakePhotoButton_Clicked();
    }


    async void TakePhotoButton_Clicked()
    {
        //Allows users to take pictures in the app
        if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
        {
            DisplayAlert("No Camera", "Camera is not available.", "OK");
            return;
        }

        var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
        {
            //Sets the properties of the photo file 
            SaveToAlbum = true,
            PhotoSize = PhotoSize.MaxWidthHeight,
            DefaultCamera = CameraDevice.Rear
        });

        if (file == null)
            return;
    }
我对这一切都很陌生,我觉得自己好像犯了一个技术错误。我读过这篇文章,说有人犯了同样的错误。他们声称:“我最终意识到,在拍摄完照片后,它重新显示了表单,导致出现的事件再次被触发,从而导致在拍摄旧照片的同时拍摄新照片。因此发生了坠机。”


然而,我不明白我的代码是如何导致这种情况的。欢迎提供任何指导。

使用
bool
变量检查您是否已经拍照

bool first = true;

protected override async void OnAppearing()
{
   if (first) TakePhotoButton_Clicked();
}

async void TakePhotoButton_Clicked()
{
    first = false;

    ...
}

这可以消除我的错误,但它只会显示媒体选择器一次。如果我切换到另一个选项卡并返回到照相机选项卡,则不会显示媒体选择器。你对此有什么建议吗?如果你真的想这样做,一个更好的方法可能是使用TabbedPage的CurrentPageChanged事件来触发选择器,而不是一次出现