每秒调用一个json Web服务

时间:2013-02-25 09:41:02

标签: c# json web-services windows-phone-7

我创建了json web service&在我的网站上使用。
现在我想在我的Windows Phone应用程序中使用它来显示该Web服务正在接收的数据。所以我写下面的代码--->

     //// 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                                                

代码工作正常,但我认为用BindData方法编写的Web客户端每次都会实例化(每100毫秒),&这可能是我跑得很慢的原因......

有没有办法实例化它(网络客户端)一次&每次通话都更新下载的字符串???
因此,如果有人使用网络服务而不是plz检查上面的代码&如果有任何错误

,请进行评论或编辑

2 个答案:

答案 0 :(得分:1)

你不是每时每刻都在呼唤它。你是每隔1/10秒召唤一次,这是一个很短的时间。如果您想每秒调用一次,请确保指定正确的间隔:

TradeThread.Interval = TimeSpan.FromMilliseconds(1000);

或者如果您愿意:

TradeThread.Interval = TimeSpan.FromSeconds(1);

WebClient的实例化并不是一件你应该担心的昂贵操作。

答案 1 :(得分:0)

我不确定它是否是最好的方法(盲目检查每一秒)你可能会得到一个缓慢或间歇性连接的人。 我认为即使线程被暂停,DownloadStringComplete也应该触发,所以也许你可以进行json调用,暂停线程,然后在downloadComplete事件中取消它。如果这不起作用,也许你可以设置一个内部变量,比如_receivedData,并在发送请求之前将其设置为false,然后在downloadComplete中将其设置为true ...类似......

        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