1

我需要一些代码来让我知道异步线程何时完成。这是我正在制作的 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的循环中。

有没有人知道我可以做些什么来让我的函数等待异步请求完成,以便它更新我的类变量,以便我的文本框可以看到数据

4

2 回答 2

0

在 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));
于 2012-08-08T18:56:12.620 回答
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”何时被触发会很有帮助。

于 2011-05-25T07:32:16.600 回答