【问题标题】:async calls in LoadState blocking the UI ThreadLoadState 中的异步调用阻塞了 UI 线程
【发布时间】:2013-02-18 18:48:15
【问题描述】:

在我的 Windows 8 应用程序中,我正在覆盖 Page´s LoadState 将其设置为异步并使用它来下载和解析我等待的任务中的数据。之后我将这些数据绑定到 GridView。

虽然我的处理应该异步运行,但在我处理该任务期间所有 ui 都被阻止。

public class Example
    {
        // ...
        protected override async void LoadState( . . . )
        {
            await Task.Run(() => downloadAndParseData());
            // Update the UI with results
        }

        private async Task downloadAndParseData()
        {
            // ...
        }
        // ...
    }

有谁知道为什么会这样以及我如何能够解决它?

【问题讨论】:

  • 如果downloadAndParseData已经返回了一个任务,为什么还要使用Task.Run()
  • 您能否编辑您的问题以包含简短但完整的问题示例? downloadAndParseData() 中可能存在导致阻塞的内容。另外,您确定问题出在这段代码中,而不是其他地方吗?
  • 如果您的 downloadAndParseData 方法正在执行大量 UI 更新,这可能会使您的 UI 出现“阻塞”...
  • @NicoSchertler 我按照msdn.microsoft.com/en-us/library/windows/apps/hh994635.aspx 上的示例进行操作,按照您的问题,我想没有必要?
  • @PeterRitchie 之后我会进行所有 UI 更新。但我会仔细检查。

标签: c# microsoft-metro winrt-xaml windows-store-apps async-await


【解决方案1】:

我使用了 SQLite 库,但没有使用它的异步方法。

因此所有 db 操作最终都阻塞了 ui 线程。

我通过使用 SQLite 提供的异步方法解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2017-07-07
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多