ios - 导航到新选项卡时调用异步函数
问题描述
当用户导航到我的一个标签页时,我正在尝试立即显示 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;
}
我对这一切都很陌生,我觉得好像我犯了一个技术错误。我读了这篇文章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;
...
}
推荐阅读
- oracle12c - AF 表列手动拉伸
- forms - 在语义 UI 中,处理“过渡:元素不再附加到 DOM。无法动画”
- javascript - 向我的 js 添加新功能时提示不起作用的问题?
- elasticsearch - 过滤文档中的 Elasticsearch
- python - 在计算距离矩阵时遇到错误:“RuntimeWarning:sqrt 中遇到无效值”
- dart - Flutter [desktop]:如何在没有文本字段的情况下从物理键盘获取输入?
- firebase - 使用 Firebase Cloud Functions、Messaging、Firestore 制作自动通知
- python - 无法访问当前工作目录中的文件 - 'FileNotFoundError: [Errno 2] 没有这样的文件或目录'
- python - 在解析 JSON 文件数据时,根据 Python 配置文件中提到的位置添加具有空值的缺失字段
- angular - Angular 2+如何在对等模块中引用组件