2011-03-27 157 views
1

當應用程序加載時,我想閱讀本地資源文件,解析它並填充數據結構,然後填充UI。我希望在非UI線程中發生這種情況,我該如何實現這一點? 該文件採用Json格式,我使用json.net庫進行反序列化。 當我測試這個連進度條在這個持續時間不顯示,我嘗試使用工具包:performanceprogressbar,甚至沒有顯示進度條,所以我想知道什麼是正確的解決方案。WP7/Silverlight中的異步操作/任務

var resource = System.Windows.Application.GetResourceStream(new Uri(string.Format("testProj;component/{0}", fileName), UriKind.Relative)); 
     StreamReader streamReader = new StreamReader(resource.Stream); 
     string jsonText = streamReader.ReadToEnd(); 

     jsonList = JsonConvert.DeserializeObject<List<ComicItem>>(jsonText); 

回答

0
  1. 啓動性能進度條通過IsIndeterminate設置爲顯示真實
  2. 獲取和使用後臺工作線程
  3. 加載你的資源只能更新UI線程的UI
  4. 當所有完成集IsIndeterminate爲False
8

您需要的類是BackgroundwWorker類。你這樣使用它: -

var bw = new BackgroundWorker() 
bw.DoWork += (s, args) => 
{ 
    // This runs on a background thread. 

    var resource = System.Windows.Application.GetResourceStream(new Uri(string.Format("testProj;component/{0}", fileName), UriKind.Relative)); 
    StreamReader streamReader = new StreamReader(resource.Stream); 
    string jsonText = streamReader.ReadToEnd(); 

    jsonList = JsonConvert.DeserializeObject<List<ComicItem>>(jsonText); 
    // Other stuff with data. 
}; 
bw.RunWorkerCompleted += (s, args) => 
{ 
    // Do your UI work here this will run on the UI thread. 
    // Clear progress bar. 
}; 

// Set progress bar. 

bw.RunWorkerAsync(); 

順便說一句,你確定你不能使用DataContractJsonSerializer?事實上,你覺得有必要以異步的方式做到這一點,這表明數據量很大,內存對WP7來說是非常重要的。 JSON.NET方法要求您在反序列化之前將整個JSON流讀入字符串,而DataContractJsonSerializer可以直接解串行器。

+0

感謝它幫助。 – Vaysage 2011-03-29 05:14:49