日期:2014-05-18  浏览次数:20817 次

c# winForm 做一个上传进度条【求大大帮忙】
做了一个应用程序以 二进制流 的格式 保存文件到 数据库表的image 字段,我发现在局域网里上传较大的文件,比较慢,因此想做一个 上传的进度条 求大大指点 
下面是我搜到的 也理解了 但是我知道怎么统计我的上传了多少

  //更新进度列表 (第二步:定义一个代理,用于更新ProgressBar的值(Value))
  private delegate void SetPos(int ipos);

  //第三步:进度条值更新函数(参数必须跟声明的代理参数一样)
  private void SetTextMessage(int ipos)
  {
  if (this.InvokeRequired)
  {
  SetPos setpos = new SetPos(SetTextMessage);
  this.Invoke(setpos, new object[] { ipos });
  }
  else
  {
  this.label1.Text = ipos.ToString() + "/100";
  this.progressBar1.Value = Convert.ToInt32(ipos);

  }
  }

  //第四步:函数实现
  private void button1_Click(object sender, EventArgs e)
  {
  Thread fThread = new Thread(new ThreadStart(SleepT));//开辟一个新的线程 
  fThread.Start();
  button1.Enabled = false;
  }

  //第五步:新的线程执行函数
  private void SleepT()
  {
  for (int i = 0; i < 500; i++)
  {
  System.Threading.Thread.Sleep(100);//没什么意思,单纯的执行延时 
  SetTextMessage(100 * i / 500); // 该处导入的值 我不知道怎么 把我的上传了多少 传入进去
  }
  }

下面是我以 二进制流 上传的程序,文件先转化为bytes[]数组,然后通过调用数据库里的存储过程保存到表的image字段

  //将流转化为byte[] 
  byte[] bytes = new byte[fileStream.Length];
  fileStream.Read(bytes, 0, bytes.Length);
  fileStream.Close();

  //调用存储过程将bytes[]保存到image字段
  SqlCommand cmdUploadDoc;
  cmdUploadDoc = new SqlCommand("UploadFile", sqlCon);
  cmdUploadDoc.CommandType = CommandType.StoredProcedure;

  cmdUploadDoc.Parameters.Add("@文件名", SqlDbType.VarChar, 100);
  cmdUploadDoc.Parameters.Add("@扩展名", SqlDbType.VarChar, 12);
  cmdUploadDoc.Parameters.Add("@上传用户", SqlDbType.VarChar, 50);
  cmdUploadDoc.Parameters.Add("@文件大小", SqlDbType.VarChar, 200);
  cmdUploadDoc.Parameters.Add("@上传时间", SqlDbType.VarChar, 20);
  cmdUploadDoc.Parameters.Add("@保存的文件", SqlDbType.Image);
  cmdUploadDoc.Parameters.Add("@文件描述", SqlDbType.VarChar, 4000);

  cmdUploadDoc.Parameters[0].Value = fileName;
  cmdUploadDoc.Parameters[1].Value = fileSpreadName;
  cmdUploadDoc.Parameters[2].Value = SystemForm.userName;
  cmdUploadDoc.Parameters[3].Value = fileSize;
  cmdUploadDoc.Parameters[4].Value = DateTime.Now.Date.ToShortDateString();
  cmdUploadDoc.Parameters[5].Value = bytes; //接受byte[]类型的值
  cmdUploadDoc.Parameters[6].Value = TxtFileDescription.Text;
  cmdUploadDoc.ExecuteNonQuery();


有没有大大 知道 如何把 这个存储过程 当前上传了多少 调出来?不胜感激

------解决方案--------------------
你可以另起个time线程嘛,做进度条滚动画面
再开始传输时开启timer1.start();上传完成 做 timer1.stop()操作就可以吧,希望能对你又帮助
int pi = 0;
private void timer1_Tick(object sender, EventArgs e)
{
pi++;
if (pi < 100)
{
progressBar1.Value = pi;
}
else
{