簡體   English   中英

WinRT中的后台任務

[英]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
}

不要忽略編譯器警告。 特別是,如果你有一個不使用awaitasync方法,那么編譯器會特別告訴你該方法不是異步的並且將同步運行。

我建議的第一件事是更改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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM