這是我認爲我確切知道發生了什麼,但一直無法確定如何在Windows Phone 8上修復它的這些事情之一。我希望有兩種方法可以讀取通過http;一個同步和一個異步。同步功能目前正在從UI線程調用,但最終可能不會。 相關的代碼如下所示:在UI線程上同步使用DownloadStringTaskAsync
private static string result;
public static string load() {
Task task = loadAsync();
task.Wait;
return result;
}
public async static Task <string> loadAsync() {
...
result = await webClient.DownloadStringTaskAsync(uri);
}
我打算當我打電話Task.Wait()UI線程會等到讀操作完成;沒關係 - 我希望UI暫停,直到讀取完成。但正如我寫的,我似乎正在創造一個僵局,以至於一切都停滯不前,並且下載從未完成,並且可能永遠不會開始。這是有道理的task.wait()是造成僵局,所以我創建了以下測試類:
public static class Test
{
const string apiUrl = @"http://169.254.21.12:51428/api/Q";
private static WebClient webClient;
private static Uri uri;
private static string result;
public static string Load()
{
webClient = new WebClient();
webClient.Headers["Accept"] = "application/json";
uri = new Uri(apiUrl);
try
{
Task<string> task = webClient.DownloadStringTaskAsync(uri);
result = task.Result;
}
catch (Exception e) { result = null; }
return result;
}
這個類是從VS13的WP8模擬器上運行,談論到本地IIS,還推出瞭如在同一個解決方案中單獨的項目。我們到達'結果='行,但該行永遠不會返回。我知道IIS正在運行,並且網絡鏈接正在工作,因爲我可以使用手機中的IE訪問URI。
你是否試圖阻止UI線程?這是一個非常糟糕的主意。它沒有幫助,你已經顯示的代碼,甚至不會編譯... –
嗨,喬恩,我很抱歉 - 我寫這個問題的方式不清楚。我已編輯希望解決。我可以發佈剩餘的代碼,但這只是WebClient的設置,所以似乎沒有任何意義。但如果有幫助,會做。 – jbhelicon