2013-02-25 56 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