2011-07-01 48 views
0

您好我正在製作一個應用程序,當它啓動時生成一個HttpWebRequest,接收一些XML並將其放入一個列表中。此代碼位於App.xaml.cs中的Application_Launching方法中。這個列表然後用在應用程序第一頁上的列表選擇器中。Windows Phone 7如何創建事件來更新用戶界面

但是,因爲HttpWebRequest在不同的線程上執行,當我將它分配給Listpickers itemSource時,列表不會被填充。

我被告知我應該有一個事件在列表完成後觸發,並且在第一頁上有一個偵聽器來填充列表。我將如何宣佈此事件及其聽衆?

回答

0

您可以使用HttpWebRequest並使AsyncCallback或使用WebClient類,其中有一個事件DownloadStringCompleted。 An example

0
public void GetXMLfromServer() 
    { 
     try 
     { 
      string url = "";//your url here 
      HttpWebRequest request = 
     (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); 
      request.BeginGetResponse(new AsyncCallback(GetXMLfromServerCompleted), 
      request); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 
    private void GetXMLfromServerCompleted(IAsyncResult asynchronousResult) 
    { 
     try 
     { 
      string resultString = ""; 
      HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 
      HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
      using (StreamReader streamReader1 = new StreamReader(response.GetResponseStream())) 
      { 
       resultString = streamReader1.ReadToEnd(); 
      } 
      //**Put your code here to populate the list** 

     } 
     catch (Exception ex) 
     { 

     } 
    } 
+0

感謝Ishti但我能聽我的網主頁完成GetXMLfromServerCompleted(其中listpicker是),然後分配listpickers項目源 – user704314

+0

你可以傳遞一個deligate到GETXMLfromserver方法和調用GetXMLfromServerCompleted的deligate。 – Ishti

+0

你能告訴我我以前從未使用委託的代碼嗎?我已經儘可能地宣佈我的委託和事件。 public delegate void ListPopulatedOccuredHandler(); 公共事件ListPopulatedOccuredHandler ListPopulatedOccured; 和調用事件 如果(this.ListPopulatedOccured!= NULL){ this.ListPopulatedOccured.Invoke(); } – user704314

相關問題