multithreading - 如何在 Xamarin 中等待后台任务?
问题描述
我正在尝试使用 Xamarin 的文件选择器从设备中获取文件,并对该文件执行一些操作。但是,由于我尝试执行的操作很繁重,文件选择器会冻结并等待任务完成。因此,我无法通知用户该任务,它只是冻结了。只是我试图在后台运行此操作,例如:
- 选择文件
- 等待文件选择器屏幕关闭
- 通知用户该任务。
- 对文件进行操作。我试图用“等待”来实现这一点,但没有奏效。
编辑:我正在尝试在后台进行操作而不会导致 UI 冻结。
这是我的代码
foreach (var file in pickResult)
{
await Task.Run(async () =>
{
MainThread.BeginInvokeOnMainThread(() =>
{
doSomethingWith(file.FullPath);
}
);
});
}
如果您分享您的想法来实现这一目标,我会很高兴。
解决方案
尝试这样的事情
var tasks = new List<Task>();
foreach (var file in pickResult)
{
tasks.Add(Task.Run(()=>doSomethingWith(file.FullPath)));
}
await Task.WhenAll(tasks);
//all done, you can update UI to indicate this.
这里我们为每个文件启动任务,然后在for循环之后我们异步等待所有任务完成。然后我们可以更新 UI 或其他东西。
推荐阅读
- javascript - 带有“if else”指令和日期的未处理承诺拒绝
- java - 单击 ListView 项目并在另一个活动中显示其数据库内容
- python - sorted() 自动按元组的第二个元素排序
- encryption - 在 OutSystems 应用中实现 AES/RES 加密解密
- python - Appending specific indices from zipped lists
- jsse - Tomcat8不断显示https-jsse-nio-443-exec日志
- php - 如何在 Symfony 3.4 中获取当前页面 URL
- sql - TableCell 数据传递到另一个 UIViewController
- forms - 使用 VeeValidate 的 VueJS 表单验证,无法在某些移动设备上输入
- excel - 5 个特定单元格的平均值,包括活动行上面的 2 个/下面的 2 个跳过空白而不是包含在范围内