【问题标题】:Background Tasks in WinRTWinRT 中的后台任务
【发布时间】:2013-09-05 11:59:40
【问题描述】:

情况:

我从不同的互联网位置获取 json 对象。

这些包含我放在 BingMap 上的许多地理坐标。 效果非常好。

问题:

但是当我从 Internet 位置获取数据时,我得到一个阻塞的 ui。 有没有办法在后台运行它?

我尝试了异步功能,但我也得到了一个阻塞 UI..

这里有一些代码 来电者

public async void Caller_Click(){
    await jsonDataClass.DoOperations();
}

jsonDataClass中的方法

public async Task<bool> DoOperations(){
    // do requests and some stuff..
    var fetchedElements = getdata(); // not async, because its in a portable lib
    foreach (var element in fetchedElements)
      OnEvent(element); // raises an event to assing the element to the Bing map
}

【问题讨论】:

    标签: c# windows-runtime bing-maps portable-class-library winrt-async


    【解决方案1】:

    不要忽略编译器警告。特别是,如果您有一个不使用awaitasync 方法,那么编译器会特别告诉您该方法不是异步的,而是同步运行的。

    我建议的第一件事是将getdata 更改为asyncMicrosoft.Bcl.Async NuGet 包扩展了async 对可移植类库的支持。

    如果这不可能,那么您将不得不在后台线程上执行getdata,如下所示:

    public async Task<bool> DoOperations()
    {
      var fetchedElements = await Task.Run(() => getdata());
      foreach (var element in fetchedElements)
        OnEvent(element);
    }
    

    附:术语“后台任务”有一个special meaning in WinRT。您真正需要的是在线程池线程(或后台线程)上运行代码,这与 WinRT 所谓的“后台任务”不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多