2

私は Windows Phone 8 で開発していますが、WebClient の DownloadStringCompleted を呼び出すときに同じメソッドでデータを操作できるかどうかを知りたいですか?

private void DownloadDataFromWebService(String uri)
    {
        WebClient wc = new WebClient();
        wc.DownloadStringAsync(new Uri(uri));
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
    }

    private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        RootObject r = JsonConvert.DeserializeObject<RootObject>(e.Result);
        List<Category> listeCategories = r.Result;
    }

したがって、オブジェクトを返したいので、すべてのコードを 1 つのメソッドだけで管理したいと考えています。

private List<Category> GetCategories(String uri)
    {
        WebClient wc = new WebClient();
        wc.DownloadStringAsync(new Uri(uri));
        .....
        .....
        RootObject r = JsonConvert.DeserializeObject<RootObject>(e.Result);
        return (List<Category>) r.Result;
    }
4

1 に答える 1

2

はい、魔法の TaskCompletionSource クラス、http://msdn.microsoft.com/en-us/library/dd449174(v=vs.95).aspxにより可能です。ダウンロードする:

async Task<List<object>> getCategories(String uri)
{
    var taskCompletionObj = new TaskCompletionSource<string>();
    var wc= new webClient();
    wc.DownloadStringAsync(new URI(uri, Urikind.Absolute)) += (o, e) =>
    {
    taskCompletionObj.TrySetResult(e.Result);
    };
    string rawString = await taskCompletionObj.Task;
    RootObject r = JsonConvert.DeserializeObject<RootObject>(rawString);
    return (List<Category>)r.Result; 
}

使用するには:var x = await getCategories(myURI);

于 2013-03-11T14:10:42.620 に答える