2012-12-15 83 views
1

/*在寫這個問題,測試的東西,我設法回答這個問題,我分享我的研究結果,這樣他們就可以幫助到其他一些可憐的靈魂。請參閱下面的答案。 */的Windows Phone - Web客戶端的請求沒有得到執行

我想從我的後臺任務API獲取一個JSON數據。 我有後臺任務好和運行做的事情,但是當我試圖獲取數據,什麼也沒有發生?!?

這裏是我使用的代碼:

protected override void OnInvoke(ScheduledTask task) 
    { 

     string wurl = @"http://test.com/api/stuff/getdata"; 

     WebClient webClient = new WebClient(); 
     webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted); 
     webClient.DownloadStringAsync(new Uri(wurl)); 


     NotifyComplete(); 

    } 

,這一切......的webClient_DownloadStringCompleted永遠不會被執行。

回答

5

這裏的關鍵是,WebClient執行它的方法異步NotifyComplete()被執行前的WebClient具有獲取數據的機會。

當你調用NotifyComplete(),它會通知您已完成執行你的任務和系統應終止它的操作系統。

的解決方案是在異步方法webClient_DownloadStringCompleted結束(在這種情況下)和... voala移動NotifyComplete()

警告1:,你還有25秒才能完成手頭的一切工作,否則,任務被終止。

警告2:你的後臺任務不能消耗比(在某些手機上),6 MB(在我的Windows Phone 8測試模擬器)10 MB的內存更多!如果你的後臺任務做了,它將被終止。

這是很好的考慮使用資源密集型後臺任務,如果你的應用程序將會佔用更多的內存和時間(最多10分鐘),注意這種類型的任務只有當手機正在充電時可!