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



当用户导航到我的一个选项卡页面时,我试图立即显示James Montemagno的Media Picker。我找到了一个名为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;
}

我对这一切都很陌生,我觉得自己好像犯了一个技术错误。我读过这篇文章https://damian.fyi/2016/07/06/only-one-operation-can-be-active-at-at-time/关于有人犯了同样的错误。他们声称;我终于意识到,在拍摄完照片后,它正在重新显示表单,导致出现的事件再次启动,从而导致在拍摄旧照片的同时拍摄新照片。因此发生了坠机事件">

然而,我不知道我的代码是如何导致这种情况的。如有任何指导,我们将不胜感激。

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

bool first = true;
protected override async void OnAppearing()
{
if (first) TakePhotoButton_Clicked();
}
async void TakePhotoButton_Clicked()
{
first = false;
...
}

最新更新