【问题标题】:OpenReadCompleted Event is Not exist for HttpClient in Windows Phone 8.1Windows Phone 8.1 中的 HttpClient 不存在 OpenReadCompleted 事件
【发布时间】:2015-04-13 14:24:37
【问题描述】:

使用WebClient的Wp8.0中存在OpenReadCompleted事件,但使用HttpClient的WP8.1中不存在,Wp8.1中为HttpClient处理OpenReadCompleted事件的替代方法是什么

 HttpClient client = new HttpClient();
 client.OpenReadCompleted += client_OpenReadCompleted;

 void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
       MemoryStream str = new MemoryStream();
       GifDecoder gd = new GifDecoder();
       ImageTools.ExtendedImage img = new ImageTools.ExtendedImage();
       gd.Decode(img, e.Result);              //stream means image stream
       JpegEncoder png = new JpegEncoder();
       png.Encode(img, str);
    }

【问题讨论】:

    标签: c# windows-phone-8.1


    【解决方案1】:

    HttpClient 使用异步方法,而不是事件。

    要使用它们,您必须首先将您的方法标记为异步。然后您可以使用GetStreamAsync 方法来检索您的流:

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        using (var client = new System.Net.Http.HttpClient())
        {
            using (var stream = await client.GetStreamAsync(yourUri))
            {
                MemoryStream str = new MemoryStream();
                GifDecoder gd = new GifDecoder();
                ImageTools.ExtendedImage img = new ImageTools.ExtendedImage();
                gd.Decode(img, stream);              //stream means image stream
                JpegEncoder png = new JpegEncoder();
                png.Encode(img, str);
            }
        }
    }
    

    【讨论】:

    • 你是如何为 HttpClient 触发 Button_Click 事件的
    • 这只是一种向您展示其工作原理的随机方法。只需将代码放在您需要的任何地方,但不要忘记在方法中添加 async 关键字(这就是我试图演示的内容)
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多