繁体   English   中英

等待异步方法在wp7中返回结果

[英]wait for a async method to return result in wp7

你好朋友,我有一个代码如下:

for (int i = 1; i < 6; i++)
{
    int j = 0;
    Nos[j++] = Config[i];

    var xmladd = "uri to download data";
    WebClient _proxy2 = new WebClient();
    _proxy2.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompleted);
    _proxy2.DownloadStringAsync(new Uri(xmladd));

    string msg = Config[11] + ":" + Config[12] + " .My Current Location is " + Properties.address + " , Latitude : " + clslatlong.ReturnLat() + " , Longitude : " + clslatlong.ReturnLongi(); 
}

这里的问题是完成事件不会立即触发并继续执行其他代码,但是我的下一个代码是基于完成事件返回的结果的,在这种情况下该怎么办? 我的代码应等待获得完成事件的响应,然后再继续进行操作,请帮助。

如果取决于结果,则应在请求完成处理程序中继续执行代码。 这就是事件驱动或异步编码的工作方式。

异步编程会变得混乱。 正确的方法是通过约翰·保罗(Johan Paul)的答案:拆分函数并将其一部分放入事件处理程序中。 您的代码最终会变得非常混乱,因为您正在循环中执行异步操作。

您的问题同时具有WP7和WP7.1标签; 如果您仅支持WP7.1就可以摆脱困境,那么您可以选择Microsoft.Bcl.Async库(当前为Beta)。 这可以在WP7.1上启用async / await ,这要容易得多:

for (int i = 1; i < 6; i++)
{
  int j = 0;
  Nos[j++] = Config[i];

  var xmladd = "uri to download data";
  WebClient _proxy2 = new WebClient();
  var result = await _proxy2.DownloadStringTaskAsync(xmladd);

  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM