2013-04-01 51 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代碼...