2011-03-27 108 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