[英]Background Tasks in WinRT
請求:
我來自不同的互聯網位置,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
}
不要忽略編譯器警告。 特別是,如果你有一個不使用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);
}
PS術語“后台任務” 在WinRT中具有特殊含義 。 你真正需要的是在線程池線程(或后台線程)上運行代碼,這與WinRT稱之為“后台任務”的不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.