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)
不要忽略编译器警告.特别是,如果您有一个async不使用的方法await,那么编译器将明确告诉您该方法不是异步的并且将同步运行.
我建议的第一件事就是改变getdata它async.该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称之为"后台任务"的不同.
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |