控制Maximum干什么,Maximum设置成一个固定值
然后更新value就行了
另,button执行耗时的操作,会阻塞UI,造成界面假死
最好是放到线程里去执行

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.aspx
      

  2.   

    如果进度预估不需要很精确,Maximum就定成你要执行的指令条数就好,执行完一条step一下。否则你需要知道每条指令执行所需的精确秒数,把Maximum定成秒数*30,另定个timer每秒让进度条跳30下,人眼看应该平滑了
      

  3.   

    发送邮件事件用进度条显示示例
    //进度条设置
      <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                                    <ProgressTemplate>
                                        <table border="0" width="309" id="table1">
                                            <tr>
                                                <td style="width: 269px">
                                                    邮件发送中,请稍候。
                                                </td>
                                            </tr>
                                            <tr>
                                                <td style="width: 269px">
                                                    <img src="wait.gif" /></td>
                                            </tr>
                                        </table>
                                    </ProgressTemplate>
                                </asp:UpdateProgress>
    //发送设置
      protected void btnSendMail_Click(object sender, EventArgs e)
        {
            try
            {
                System.Threading.Thread.Sleep(5000);// 延迟5秒钟。
                MailAddress SendMailFrom = new MailAddress(txtFrom.Text);
                MailAddress SendMailTo = new MailAddress(txtTo.Text);
                MailMessage MyMessage = new MailMessage(SendMailFrom, SendMailTo);
                MyMessage.Subject = txtSubject.Text;//邮件主题
                MyMessage.Body = txtBody.Text;//邮件正文
                switch (ddPriority.SelectedValue)//判断其发送的优先极
                {
                    case "Low":
                        MyMessage.Priority = MailPriority.Low;
                        break;
                    case "Normal":
                        MyMessage.Priority = MailPriority.Normal;
                        break;
                    case "High":
                        MyMessage.Priority = MailPriority.High;
                        break;
                }
                SmtpClient emailClient = new SmtpClient(txtServer.Text);
                emailClient.Send(MyMessage);
                lit_MailStatus.Text = "邮件已经成功发送";
            }
            catch (Exception ex)
            {
                lit_MailStatus.Text = ex.ToString();
            }
        }
      

  4.   

    那要看下位机是否有记录Maxniu,它如果有发过来就很好办了~~~~一般都是应该有的吧
      

  5.   

    其实完全没必要要求下位机告诉你Maximum
    指令虽然很多,完全执行完会很耗时
    但是单个指令应该执行的很快吧
    而且单个指令执行是否成功你应该是能检测到的
    你只要把Maximum设置成指令数量,然后每执行完一条指令,value+1,就行了
      

  6.   

    4、7楼说的对,
    因为整个执行过程话费的时间不好确定,
    所以进度条就是告诉用户,正在处理而不是死掉
    对于进度条更新来说,每完成一部分或周期性的增长,涨到最大,从头再来也是可以的。
    为了直观说明步骤,
    在进行条上最好加上label,显示当前操作的说明,
    这样一般用户都能接受的
      

  7.   

    感谢大家的帮忙,有点忙就没能及时回复大家,抱歉。我有几个button,每个button对应和下位机进行不同的通信。我希望进度条可以在点击任何一个button的时候,能够指示当前通信的进度。这样子,下发和上行的指令条数就是不同的。另外,有一个button的指令条数会因为选择的不同而不同。这样子的进度条应该怎么做呢?