0

を作成json web serviceし、自分の Web サイトで使用しました。
今、私は自分の 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 ミリ秒ごとに) インスタンス化されていると 思います。

それ(Webクライアント)を一度インスタンス化し、ダウンロードした文字列を呼び出しごとに更新する方法はありますか???
したがって、誰かがウェブサービスを使用したことがある場合は、上記のコードを確認して、エラーがある場合はコメントまたは編集してください

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 に答える