2

问题的症状:WinRT中的后台任务

我从不同的Internet位置获取json对象。

这些包含了许多地理坐标,我把它们放到BingMap上。 这非常完美。

问题:

,但是当我从互联网位置获取数据,我收到了阻塞UI。 有没有一种方法在后台运行?

我尝试了异步功能,但我到那里阻塞UI太..

在这里,在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 
} 

回答

6

一些代码 来电

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

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

我推荐的第一件事就是改变getdata,使其为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所称的“后台任务”不同。