2013-02-25 58 views
0

我創建了一個json web service &用於我的網站。
現在我想在我的Windows Phone應用程序中使用它來顯示數據,該數據由該Web服務接收。使我心中已經寫下面的代碼--->每秒撥打一次json網絡服務

 //// some code 

StartThread(); 
     } 

      void StartThread() 
      { 
       DispatcherTimer TradeThread = new DispatcherTimer(); 
       TradeThread.Interval = TimeSpan.FromMilliseconds(1000); 
       TradeThread.Tick += new EventHandler(BindData); 
       TradeThread.Start(); 
      } 

      void BindData(object sender, EventArgs e) 
      { 
       WebClient wc = new WebClient(); 
       wc.DownloadStringAsync(new Uri("some URL")); 
       wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
      } 

      void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
      { 
       JObject jsonObject = JObject.Parse(e.Result); 
       ///// some code             

的代碼工作正常,但我認爲web客戶端,心中已經寫在BindData方法被實例化在每個(每100ms)的時間, &它可能是我的運行很慢的原因......

有沒有什麼辦法進行實例化(web客戶端)一旦&更新在每次調用下載的字符串???
所以,如果有人使用了Web服務比PLZ檢查我上面的代碼&做評論或編輯它,如果任何的錯誤

回答

1

的你是不是調用它的每一秒。你每十分之一秒就會打一次,這很短暫。如果你想叫它的每一秒確保您指定正確的間隔:

TradeThread.Interval = TimeSpan.FromMilliseconds(1000); 

或者如果你喜歡:

TradeThread.Interval = TimeSpan.FromSeconds(1); 

一個WebClient的實例是不是一個昂貴的操作,你應該擔心關於。

+0

達林Dimitrov ::問題被糾正了,我不問爲什麼它很慢,我的問題是「每次實例化Web客戶端都正確嗎?」 – 2013-02-25 10:12:29

+0

是的,它是正確的。沒有問題。 – 2013-02-25 10:14:35

+0

@@@ Darin Dimitrov :: hey Darin,在這段代碼中有一個問題,它在一些請求之後緩存數據,所以數據沒有作爲web請求進行更新......你能解決這個問題嗎? – 2013-02-25 10:52:32

0

我不確定如果它是最好的方式去做(盲目檢查每一秒),你可能會得到一個緩慢或間歇性連接的人。 我認爲即使線程已暫停,DownloadStringComplete也應該被觸發,所以也許你可以進行json調用,暫停線程,然後在downloadComplete事件中取消暫停它。如果不工作,也許你可以設置一個內部變量,像_receivedData的東西,並設置爲false是在發送請求之前,然後將其設置回真正的DownloadComplete等..裏面像...

 void StartThread() 
     { 
      DispatcherTimer TradeThread = new DispatcherTimer(); 
      TradeThread.Interval = TimeSpan.FromMilliseconds(1000); 
      TradeThread.Tick += new EventHandler(BindData); 
      TradeThread.Start(); 
     } 

     Boolean _receivedData = true; 
     void BindData(object sender, EventArgs e) 
     { 
      if(_receivedData) 
      { 
       _receivedData = false; 
       WebClient wc = new WebClient(); 
       wc.DownloadStringAsync(new Uri("some URL")); 
       wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
      } 
     } 

     void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
     { 
      _receivedData = true; 
      JObject jsonObject = JObject.Parse(e.Result); 
      ///// some code