- 爱易网页
-
C#教程
- c# winForm 做一个上传进度条【求大大帮忙】,该如何解决
日期:2014-05-18 浏览次数:20852 次
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
{