Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何在主void中传递引用void_C#_.net_Static_Webclient_Void - Fatal编程技术网

C#如何在主void中传递引用void

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));

这可能是一个(另一个)noob问题,但我不知道如何做到这一点

我在一个私有方法中有一段代码,它引用了一个静态方法

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...