如何向流添加进度条并获取响应

时间:2014-05-08 09:38:20

标签: c# file-upload progress-bar

我正在尝试向我的上传按钮添加进度条。 我正在向服务器发送xmldocument文件。 我已经看过seaveral ansers但我找不到正确的方法来发送我的文件。这是我目前的代码。我已经尝试了一个后台工作者,但我得到一个例外,我用来获得响应的线程不是正确的线程所以我想知道是否有人雇用有一个简单的方法来执行此操作下面的代码

 private  void btnHttpPost_Click(object sender, EventArgs e)
    {
        WebRequest request;

        if (string.IsNullOrEmpty(txtPassword.Text) && string.IsNullOrEmpty(txtUsername.Text))
            request = WebRequest.Create(txtHttpPost.Text.Trim());
        else
            request = WebRequest.Create(txtHttpPost.Text.Trim() + "&" + txtUsername.Text.Trim() + "&" + txtPassword.Text.Trim());

        request.Method = "POST";
        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(_original.InnerXml);
        request.ContentType = "binary/octet-stream";
        request.ContentLength = bytes.Length;                  
        Stream dataStream = request.GetRequestStream();;
        dataStream.Write(bytes, 0, bytes.Length);
        dataStream.Close();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        txtResponse.Text = ((HttpWebResponse)response).StatusDescription;
        dataStream = response.GetResponseStream();
        if (dataStream != null)
        {
            var reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            txtResponse.Text += responseFromServer;
            // Clean up the streams.
            reader.Close();
        }
        if (dataStream != null) dataStream.Close();
        response.Close();
    }

任何人都可以帮助我吗? 提前谢谢

1 个答案:

答案 0 :(得分:0)

您将数据作为一个块发送:

dataStream.Write(bytes, 0, bytes.Length);

您应该以数据块(几百字节的小部分)发送数据,并在每个块之后更新进度条。

伪代码:

int dataavail = bytes.Length;
int chunkSize = 512; // 1024, 2048, 4096 are good too
while( dataavail > 0 )
{

  dataStream.Write(bytes, bytes.Length - dataavail , Math.Min(chunkSize, dataavail));
  dataavail -= chunkSize;

  // TODO: Update Progress Indicator here

}