WinRT中的后台任务

本文关键字:后台任务 WinRT | 更新日期: 2023-09-27 18:30:13

情况:

我从不同的互联网位置得到json对象。

这些包含了我放在BingMap上的地理坐标。这非常好用。

问题:

但当我从互联网位置获取数据时,我会得到一个阻塞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
}

WinRT中的后台任务

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

我建议的第一件事是更改getdata,使其成为asyncMicrosoft.Bcl.AsyncNuGet包将async支持扩展到可移植类库。

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

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

附言:"后台任务"一词在WinRT中具有特殊含义。您实际需要的是在线程池线程(或后台线程)上运行代码,这与WinRT所称的"后台任务"不同。