我希望在WPF中运行具有进度条的异步上传(最好使用PCL以便在Xamarin和SL中重用代码)。
我一直在尝试使用System.Net.HttpClient。不幸的是,PutAsync没有提供任何进度通知。(我知道Windows.Web.Http.HttpClient可以做到这一点,但它在WPF中不可用,也不在PCL中。)
对于下载,实现自己的进度条相当容易,如此处所述。您只需传递ResponseHeadersRead选项,使流在返回标头后立即可用,然后按块读取它,随着读取的进行逐步增加进度条。但是对于上传,这种技术不起作用-您需要一次性将所有上传数据传递给PutAsync,因此没有机会递增计数器。
我还想知道是否可以使用HttpClient.SendAsync。我希望能够像处理异步HttpWebRequest一样处理它(在其中,您可以在写入HttpWebRequest.GetRequestStream时递增计数器,如此处所述)。但不幸的是,HttpClient.SendAsync没有给您可写的流,因此这不起作用。
那么HttpClient是否支持具有非阻塞UI和进度条的上传呢?这似乎是一个适度的需求。还是我应该使用另一个类?非常感谢您。
我一直在尝试使用System.Net.HttpClient。不幸的是,PutAsync没有提供任何进度通知。(我知道Windows.Web.Http.HttpClient可以做到这一点,但它在WPF中不可用,也不在PCL中。)
对于下载,实现自己的进度条相当容易,如此处所述。您只需传递ResponseHeadersRead选项,使流在返回标头后立即可用,然后按块读取它,随着读取的进行逐步增加进度条。但是对于上传,这种技术不起作用-您需要一次性将所有上传数据传递给PutAsync,因此没有机会递增计数器。
我还想知道是否可以使用HttpClient.SendAsync。我希望能够像处理异步HttpWebRequest一样处理它(在其中,您可以在写入HttpWebRequest.GetRequestStream时递增计数器,如此处所述)。但不幸的是,HttpClient.SendAsync没有给您可写的流,因此这不起作用。
那么HttpClient是否支持具有非阻塞UI和进度条的上传呢?这似乎是一个适度的需求。还是我应该使用另一个类?非常感谢您。