0

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                                                

代码工作正常,但我认为我编写的 Web 客户端BindData每次(每 100 毫秒)都会实例化一次,这可能是我运行速度很慢的原因......

有什么方法可以实例化它(网络客户端)一次并在每次调用时更新下载的字符串???
因此,如果有人使用过网络服务而不是请检查我上面的代码,如果有任何错误,请进行评论或编辑

4

2 回答 2

1

你不是每秒钟都在调用它。您每 1/10 秒调用一次,这实在是太短的时间了。如果您想每秒调用一次,请确保指定正确的间隔:

TradeThread.Interval = TimeSpan.FromMilliseconds(1000);

或者,如果您愿意:

TradeThread.Interval = TimeSpan.FromSeconds(1);

a 的实例化WebClient不是您应该担心的昂贵操作。

于 2013-02-25T09:55:55.697 回答
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 
于 2013-02-25T13:13:05.780 回答