C#如何在主void中传递引用void
这可能是一个(另一个)noob问题,但我不知道如何做到这一点 我在一个私有方法中有一段代码,它引用了一个静态方法C#如何在主void中传递引用void,c#,.net,static,webclient,void,C#,.net,Static,Webclient,Void,这可能是一个(另一个)noob问题,但我不知道如何做到这一点 我在一个私有方法中有一段代码,它引用了一个静态方法 using (WebClient wc = new WebClient()) { wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); wc.DownloadStringAsync(new Uri(requestUri));
using (WebClient wc = new WebClient())
{
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri(requestUri));
}
它所指的静态方法:
static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
var xmlElm = XElement.Parse(e.Result);
var status = (from elm in xmlElm.Descendants()
where elm.Name == "status"
select elm).FirstOrDefault();
if (status.Value.ToLower() == "ok")
{
var res = (from elm in xmlElm.Descendants()
where elm.Name == "formatted_address"
select elm).FirstOrDefault();
formatted = res.Value;
}
}
现在我需要静态方法的内容来替换WebClient的内容。
比如:
由于我不确定“e”的来源,我不知道如何让它工作。您似乎忽略了异步调用的要点。这里的要点是启动异步方法的执行,然后继续执行代码,忘记所有方法,只留下一个回调方法来处理其响应 为了使事情简单明了,没有办法按照您想要的方式使用变量
格式化
,因为您只能在回调方法中使用异步调用的结果
但是,您可以使用匿名方法的lambda语法将整个代码放在同一块中(不需要单独的方法):
myLabel.Text = "loading...<br />";
using (WebClient wc = new WebClient())
{
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler((sender2, e2) =>
{
var xmlElm = XElement.Parse(e2.Result);
var status = (from elm in xmlElm.Descendants()
where elm.Name == "status"
select elm).FirstOrDefault();
if (status.Value.ToLower() == "ok")
{
var res = (from elm in xmlElm.Descendants()
where elm.Name == "formatted_address"
select elm).FirstOrDefault();
myLabel.Text = res.Value;
}
else
{
myLabel.Text = "Bad status: " + status.Value;
}
});
wc.DownloadStringAsync(new Uri(requestUri));
}
是否希望“格式化”替换“e.Result”?否,“格式化”是最终结果。“e.Result”是获得最终结果所必需的信息。我明白你的意思,我开始理解了。在继续之前,有没有办法等待结果准备好?太好了!很好用,谢谢!一直在学习;)
myLabel.Text = "loading...<br />";
using (WebClient wc = new WebClient())
{
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler((sender2, e2) =>
{
var xmlElm = XElement.Parse(e2.Result);
var status = (from elm in xmlElm.Descendants()
where elm.Name == "status"
select elm).FirstOrDefault();
if (status.Value.ToLower() == "ok")
{
var res = (from elm in xmlElm.Descendants()
where elm.Name == "formatted_address"
select elm).FirstOrDefault();
myLabel.Text = res.Value;
}
else
{
myLabel.Text = "Bad status: " + status.Value;
}
});
wc.DownloadStringAsync(new Uri(requestUri));
}
string formatted = "";
using (WebClient wc = new WebClient())
{
string raw = wc.DownloadString(new Uri(requestUri));
var xmlElm = XElement.Parse(raw);
var status = (from elm in xmlElm.Descendants()
where elm.Name == "status"
select elm).FirstOrDefault();
if (status.Value.ToLower() == "ok")
{
var res = (from elm in xmlElm.Descendants()
where elm.Name == "formatted_address"
select elm).FirstOrDefault();
formatted = res.Value;
}
else
{
formatted = "Bad status: " + status.Value;
}
}
//use the variable as you wish...