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
}
await
的async
方法,那么编译器会特别告诉您该方法是而不是异步的,并且将同步运行。
我建议的第一件事是更改getdata
,使其成为async
。Microsoft.Bcl.Async
NuGet包将async
支持扩展到可移植类库。
如果这不可能,那么您将不得不在后台线程上执行getdata
,如下所示:
public async Task<bool> DoOperations()
{
var fetchedElements = await Task.Run(() => getdata());
foreach (var element in fetchedElements)
OnEvent(element);
}
附言:"后台任务"一词在WinRT中具有特殊含义。您实际需要的是在线程池线程(或后台线程)上运行代码,这与WinRT所称的"后台任务"不同。