C# 如何向流中添加进度条并返回响应

C# 如何向流中添加进度条并返回响应,c#,file-upload,progress-bar,C#,File Upload,Progress Bar,我正在尝试将进度条添加到我的uploadbutton。 我正在向服务器发送一个xmldocument文件。 我已经看过seaveral ansers,但我无法找到一个正确的解决方法来发送我的文件。这是我当前的代码。我曾经尝试过一个backgroundworker,但是我得到一个例外,我用来获取响应的线程不是正确的线程,所以我想知道是否有人雇佣了一个简单的方法来处理下面的代码 private void btnHttpPost_Click(object sender, EventArgs e)

我正在尝试将进度条添加到我的uploadbutton。 我正在向服务器发送一个xmldocument文件。 我已经看过seaveral ansers,但我无法找到一个正确的解决方法来发送我的文件。这是我当前的代码。我曾经尝试过一个backgroundworker,但是我得到一个例外,我用来获取响应的线程不是正确的线程,所以我想知道是否有人雇佣了一个简单的方法来处理下面的代码

 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();
    }
有人能帮我吗?
提前感谢

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

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

}