我想跟踪我的上传请求的状态,例如:
- 上传数据包
- 使用进度更新 UI
- 上传数据包
- 使用进度更新 UI
- 上传数据包
- 使用进度更新 UI
- 等等等等
所以我尝试了以下代码(从网上找到的示例中收集)。
void SendData()
{
byte[] bytes = Encoding.UTF8.GetBytes(GetContent());
HttpWebRequest webRequest = WebRequest.Create(GetURL()) as HttpWebRequest;
webRequest.Method = "PUT";
webRequest.ContentType = @"application/x-www-form-urlencoded";
webRequest.ContentLength = bytes.Length;
// this doesn't seem to help
webRequest.AllowWriteStreamBuffering = false;
using (Stream reqStream = webRequest.GetRequestStream())
{
int bytesUploaded = 0;
while (bytesUploaded != bytes.Length)
{
int packetSize = Math.Min(PACKETSIZE, bytes.Length - bytesUploaded);
reqStream.Write(bytes /*buffer*/,
bytesUploaded /*Offset*/,
packetSize /*Count*/);
// this doesn't seem to help
reqStream.Flush();
bytesUploaded += packetSize;
UI.SetProgress(bytesUploaded / bytes.Length,
true /*Dispatch?*/);
}
}
WebResponse webResponse = webRequest.GetResponse(); //stalls here while it uploads
}
但它没有按预期工作。它不是在刷新后上传字节,而是在 while 循环的多次迭代中运行,然后在 GetResponse() 阶段上传。我知道它不会在 while 循环中上传,因为无论我设置多大的字节数组,通过循环所花费的时间几乎没有变化;但是 GetResponse() 阶段的时间会成比例地增加。
导致进度在眨眼间从 0% 到 100%,然后在实际发送数据所需的时间内保持在 100%。