现象时查询的时候进度条没滚动
查询完成才开始滚动
这时什么原因
错在那里
各位大侠帮忙啊 
private void button2_Click_1(object sender, EventArgs e)
        {
            td1 = new Thread(new ThreadStart(main2));
            this.progressBar1.Visible = true;
            progressBar1.Maximum = 100;
            progressBar1.Step = 1;
            td1.Start();
            if (dateTimePicker1.Value > dateTimePicker2.Value)
            {
                MessageBox.Show("起始日期应小结束日期,请重新选择日期段!", "提示");
            }
            else
            {
                label13.Text = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                label12.Text = dateTimePicker1.Value.ToString("yyyy-MM-dd") + "至" + dateTimePicker2.Value.ToString("yyyy-MM-dd");
                multiQuery(sender, e);
            }
            //this.progressBar1.Visible = false;
            //td1.Suspend();
                    
        }
        Random cmd = new Random();
        public void main2()
        {
            try
            {
                for (int i = 0; i < 100; i++)
                {
                    progressBar1.Value += cmd.Next(10);
                    Thread.Sleep(100);                }
            }
            catch
            {
                progressBar1.Value = 100;
            }
        } 

解决方案 »

  1.   

    .net 2.0 BackgroundWorker类详细用法 
    在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成“假死”的情况,或者报“线程间操作无效”的异常,为了解决这个问题,可以使用委托来处理,在.net2.0中还可以用BackgroundWorker类。BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长时间等待的情况可以使用这个类。 注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。