我如何使我的函数等待,直到异步函数已经完成
本文关键字:函数 异步 何使 我的 等待 | 更新日期: 2023-09-27 17:52:36
我需要一些代码来让我知道异步线程何时完成。这是我在做的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
的轮询处于永无休止的循环中。
有谁知道我该怎么做才能让我的函数等待异步请求完成这样它就会更新我的类变量这样我的文本框就能看到数据
您确定字符串实际上正在被下载吗?"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"何时被触发。
在windows phone中,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));