LoadState中的异步调用阻塞UI线程
问题描述:
在我的Windows 8app中,我重写Page的LoadState将其设置为异步,并使用它来下载和解析我等待的任务中的数据。之后我将这些数据绑定到一个GridView。LoadState中的异步调用阻塞UI线程
虽然我的处理应该是异步运行,但是在处理该任务期间,所有用户界面都会被阻止。
public class Example
{
// ...
protected override async void LoadState(. . .)
{
await Task.Run(() => downloadAndParseData());
// Update the UI with results
}
private async Task downloadAndParseData()
{
// ...
}
// ...
}
有没有人有一个想法,为什么这是我怎么能解决它?
答
我使用SQLite库,并没有使用它的异步方法。
因此,所有数据库操作最终阻止了ui线程。
我解决我的问题,通过使用
为什么你使用SQLite的提供异步方法'Task.Run()''如果已经downloadAndParseData'返回一个任务是什么? – 2013-02-15 13:08:49
您可以编辑您的问题以包含简短但完整的问题示例? ''downloadAndParseData()'可能会导致阻塞。另外,你确定问题出在这个代码中,而不是其他地方? – svick 2013-02-15 13:48:25
如果你的downloadAndParseData方法做了很多的UI更新,这可能会让你的用户界面显示“被阻止”... – 2013-02-15 15:38:51