如何在Blazor单按钮点击事件中调用两个异步任务(XAF Blazor)
解决方案
你只需要在CapturePhotoAsync方法中直接调用已实现的Play()异步任务即可,根据交互需求选择以下两种方式之一:
方式一:先播放快门声再执行拍照(贴合真实相机操作逻辑)
修改CapturePhotoAsync方法,在拍照逻辑前添加声音播放调用:
private async Task CapturePhotoAsync() { if (cameraModuleRef != null) { isLoading = true; StateHasChanged(); // 先触发快门声音播放 await Play(); // 执行拍照操作 await cameraModuleRef.InvokeVoidAsync("capturePhoto", ...); // 后续照片处理逻辑 var photo = ObjectSpace.CreateObject<Photo>(); ... } }
方式二:同时触发声音播放与拍照操作
如果不需要严格的先后顺序,可通过Task.WhenAll让两个异步任务并行执行:
private async Task CapturePhotoAsync() { if (cameraModuleRef != null) { isLoading = true; StateHasChanged(); // 同时启动声音播放和拍照任务 var playSoundTask = Play(); var capturePhotoTask = cameraModuleRef.InvokeVoidAsync("capturePhoto", ...); // 等待两个任务都完成 await Task.WhenAll(playSoundTask, capturePhotoTask); // 后续照片处理逻辑 var photo = ObjectSpace.CreateObject<Photo>(); ... } }
两种方式都能实现点击同一个按钮时同时触发声音和拍照操作,根据你的实际交互需求选择即可。
内容的提问来源于stack exchange,提问作者Shammu
相关产品推荐
相关产品推荐

