我创建了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检查上面的代码&如果有任何错误
答案 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