你好朋友我有一个代码如下:
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();
}
这里的问题是,不会立即触发已完成的事件并继续执行更多代码,但我的下一个代码是基于已完成事件返回的结果在这种情况下应该做什么?我的代码应该等待从完成的事件中获得响应,然后继续进行请帮助。
答案 0 :(得分:2)
如果取决于结果,您应该在请求完成处理程序中继续执行代码。这是事件驱动或异步编码的工作原理。
答案 1 :(得分:1)
异步编程可能会变得混乱;正确的方法是通过Johan Paul的回答:拆分你的函数并将其中的一部分放在事件处理程序中。你的代码最终会完全凌乱,因为你在循环中执行异步操作。
你的问题有WP7和WP7.1标签;如果您只是支持WP7.1,那么您可以选择Microsoft.Bcl.Async库(目前处于测试阶段)。这样就可以在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);
...
}
答案 2 :(得分:0)