我想在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和进度条上传?这似乎是一个适度的需求.还是我应该使用另一个班级?非常感谢.
wpf upload portable-class-library progress-bar dotnet-httpclient
在我的Windows应用商店应用程序(c#)中,我需要将MultipartFormDataContent(一些字符串内容和一些文件)上传到服务器并在响应时获取一个巨大的文件.问题 - 我不能用BackgroundDownloaders它.我只能使用一个请求.
我用的HttpClient.PostAsync方法:
using (var client = new HttpClient(httpClientHandler))
{
using (var content = new MultipartFormDataContent())
{
content.Add(...); // prepare all strings and files content
try
{
using (var response = await client.PostAsync(url, content))
{
if (response.StatusCode == HttpStatusCode.OK)
{
var inputBytes = await response.Content.ReadAsByteArrayAsync();
// some operations with inputBytes
}
......
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何计算此操作的进度?
注意:我的目标 - Windows 8.我无法使用Windows.Web.Http.HttpClient(支持最低客户端Windows 8.1).只要System.Net.Http.HttpClient