如何在等待ContentDialog用户输入的同时执行其他异步处理操作
解决方案
你可以使用WinRT异步操作提供的AsTask()扩展方法,将ContentDialog.ShowAsync()返回的IAsyncOperation<ContentDialogResult>类型转换为标准的.NET Task类型,即可沿用你推迟await的异步处理逻辑。
前置要求
首先确保代码文件顶部导入了对应的命名空间:
using System.Threading.Tasks;
正确实现代码
// 启动ContentDialog弹窗,同时将返回的IAsyncOperation转为Task Task<ContentDialogResult> dialogTask = myContentDialog.ShowAsync().AsTask(); // 等待用户操作弹窗的同时,在此处执行其他并行处理逻辑 DoOtherBackgroundWork(); await OtherAsyncProcess(); // 所有并行逻辑执行完成后,等待用户操作弹窗的返回结果 ContentDialogResult result = await dialogTask;
多任务并行等待场景
如果需要同时等待弹窗响应和多个其他异步任务完成,可以搭配Task.WhenAll使用:
// 启动所有异步任务 Task<ContentDialogResult> dialogTask = myContentDialog.ShowAsync().AsTask(); Task<DataModel> dataLoadTask = FetchRemoteDataAsync(); Task fileProcessTask = ProcessLocalCacheAsync(); // 等待所有任务全部执行完成 await Task.WhenAll(dialogTask, dataLoadTask, fileProcessTask); // 读取各任务的返回结果,任务已完成时读取Result不会阻塞线程 var dialogResult = dialogTask.Result; var loadedData = dataLoadTask.Result;
注意:你提供的示例代码中将
await误写为avait,实际编码时请修正拼写避免编译错误。
内容的提问来源于stack exchange,提问作者under
相关产品推荐
相关产品推荐

