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

因此,我想只用一种方法管理所有代码,因为我想返回一个对象 例如,

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 回答