WinRT中的后台任务

时间:2013-09-05 11:59:40

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

这是一种情绪:

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

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

问题:

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

1 个答案:

答案 0 :(得分:7)

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

我建议首先更改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);
}

P.S。术语“后台任务”有special meaning in WinRT。你真正需要的是在线程池线程(或后台线程)上运行代码,这与WinRT称之为“后台任务”的不同。