WinRT中的后台任务

Sas*_*cha 2 c# bing-maps portable-class-library windows-runtime winrt-async

请求:

我来自不同的互联网位置,json对象.

这些包含我放在BingMap上的多个Geocoordinates.这非常有效.

问题:

但是当我从互联网位置获取数据时,我得到了阻止ui.有没有办法在后台运行?

我尝试了异步功能,但我也有阻止UI ...

这里有一些代码来电

public async void Caller_Click(){
    await jsonDataClass.DoOperations();
}
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 6

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

我建议的第一件事就是改变getdataasync.该Microsoft.Bcl.AsyncNuGet包扩展async到便携式类库的支持.

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

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

PS术语"后台任务" 在WinRT中具有特殊含义.你真正需要的是在线程池线程(或后台线程)上运行代码,这与WinRT称之为"后台任务"的不同.