我需要一些代码才能让我知道异步线程何时完成。这是我正在制作的Windows手机应用程序。该应用程序是一个显示实时离开的公交车跟踪器,数据将从在线网页上获取。
我在GetDataFeed
函数
// start the asynchronous request
IAsyncResult aResult = BusStopFeedRequest.BeginGetResponse(new AsyncCallback(HandleFeedData), myState);
这将触发我的HandleFeedData
函数,该函数会将网站源代码保存到文本字符串变量中。
我的问题是我的手机应用程序上的文本框不会填充字符串的内容,因为字符串中还没有数据。这由textbox1.Text = obj.GetText()
调用,它应该在我的实例化类中返回私有字符串。
我已经研究过使用aResult.AsyncWaitHandle.WaitOne()
并尝试使用aResult.IsCompleted()
方法进行投票,但是从我阅读和发现自己的方法来看,这些都没有用。 WaitOne
引发意外错误,IsCompleted
的轮询处于永无止境的循环中。
有没有人深入了解我可以做些什么来让我的函数等待异步请求完成,以便更新我的类变量,以便我的文本框可以看到数据
答案 0 :(得分:0)
您确定该字符串实际上正在下载吗? “BeginGetResponse”是WebRequest类上的一个函数,在Windows Phone上不可用。可能没有下载数据。但是,如果正在下载,我建议您执行以下操作:
IAsyncResult aResult = BusStopFeedRequest.BeginGetResponse(new AsyncCallback(HandleFeedData));
然后:
private void HandleFeedData(IAsyncResult result)
{
string feedData = (string)result.AsyncState;
textbox1.Text = feedData;
// code to save the feedData here
}
但是,确切了解BusStopFeedRequest的“BeginGetResponse”何时被触发将会有所帮助。
答案 1 :(得分:0)
在Windows手机中,HTTPWebRequest包含BeginGetResponse和EndGetResponse方法。您需要在函数HanldeFeedData函数中添加类似的代码。
HttpWebResponse response=(result.AsyncState as HttpWebrequest).EndGetResponse(result) as HttpWebResponse;
string returnValue=null;
using (StreamReader sr=new StreamReader(response.GetResponseStrem())
{
returnValue=sr.ReadToEnd();
}
Dispatcher.BeginInvoke(new Action(()=>textbox1.Text=returnValue));