0

私はC#.Netプログラミングに不慣れで、問題に直面しています。getLocation関数を呼び出すと、常に「場所」が空になります。私は自分が間違ったやり方で物事をしていることを知っています。しかし、誰かが私が正しい方法でそれをするのを手伝ってくれるなら、それは素晴らしいことです。getLocation関数がロケーション値を返すようにしたい。したがって、ロケーション値を返す前にwc.downloadStringが実行された場合にのみ返されます。

public String getLocation()
{
    RetrieveFormatedAddress(latitude, longitutde);
    location = returnVal;
    return location;
}

static void RetrieveFormatedAddress(string lat, string lng)
{
    string requestUri = string.Format(baseUri, lat, lng);

    using (WebClient wc = new WebClient())
    {
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
        wc.DownloadString(new Uri(requestUri));
        //wc.DownloadStringAsync(new Uri(requestUri));
    }
}

private 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();
        returnVal = res.Value;
    }
    else
    {
        returnVal = "No Address Found";
    }

}
4

2 に答える 2

2
public String getLocation()
{
    return RetrieveFormatedAddress(latitude, longitutde);
}

static string RetrieveFormatedAddress(string lat, string lng)
{
    string requestUri = string.Format(baseUri, lat, lng);

    using (WebClient wc = new WebClient())
    {
        var result = wc.DownloadString(new Uri(requestUri));
        var xmlElm = XElement.Parse(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();
            return res.Value;
        }
        else
        {
            return "No Address Found";
        }
    }
}
于 2013-02-15T20:56:33.273 に答える
1

メソッドは、DownloadString()メソッドの同期バージョンですDownloadStringAsync()。サーバーからダウンロードしたデータを文字列として返します。あなたのコードでは、この値をどこにも読んでいません。データを取得してみてくださいvar data = wc.DownloadString(new Uri(requestUri));

于 2013-02-15T20:58:24.863 に答える