我来自不同的互联网位置,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
}
答案 0 :(得分:7)
不要忽略编译器警告。特别是,如果您的async
方法不使用await
,那么编译器将明确告诉您该方法不异步并且将同步运行。< / p>
我建议首先更改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);
}
P.S。术语“后台任务”有special meaning in WinRT。你真正需要的是在线程池线程(或后台线程)上运行代码,这与WinRT称之为“后台任务”的不同。