2013-04-01 46 views
0

我目前正在开发一个应用程序,但对于wp7开发来说相当新,我主要的进程调用另一个使用StreamReader读取一个类的内容的类网页和分配变量。我遇到的问题是主流程正在尝试在赋值之前使用变量。有没有什么办法可以使主进程等待,直到StreamReader的完成如何让主线程等待不同类中的StreamReader完成

在主线程我:

locationDetails = new LocationResults(); 
locationDetails.getResults(addressDetails); 

然后在LocationResults类

public void getResults(String address) 
    { 
     String addy, tmp; 
     if (address[0] == '+') 
     { 
      tmp = address.Substring(1); 
      addy = baseAddress + tmp + "&sensor=false"; 
     } 
     else 
      addy = baseAddress + address + "&sensor=false"; 

     WebClient webClient = new WebClient(); 
     webClient.OpenReadAsync(new Uri(addy)); 
     webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); 

    } 

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    { 
     String tmp; 
     var reader = new StreamReader(e.Result); 
     tmp = reader.ReadToEnd().ToString(); 
     results = tmp; 
    } 

回答

0

这是一个很长一段时间因为我使用WP 7和.NET,但我认为以下方法可能有所帮助:

  1. 使用任务并行库执行整个getResult-Procedure异步到您的主线程。
  2. 在该任务中同步使用WebClient并返回读取数据。
  3. 通过http://msdn.microsoft.com/en-us/library/hh194793.aspx指定一个延续操作,并传递主线程的TaskScheduler实例,以使其同步。
  4. 将影响结果的主线程的代码放在继续操作中。

编辑: 我猜的代码应该看起来像:

Task.Factory.StartNew((adr)-> InvokeGetResult(adr as string), addressDetails) 
    .ContinueWith((data) -> HandleDataSynchronousToMainThread(data), 
     TaskScheduler.Current); 

但再次:它已经很长一段时间,因为我写我的最后一个.NET代码...