做了一个应用程序以 二进制流 的格式 保存文件到 数据库表的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();
有没有大大  知道 如何把 这个存储过程 当前上传了多少 调出来?不胜感激

解决方案 »

  1.   

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