关于timer+progressbar控件,该怎么解决

关于timer+progressbar控件

 bool timeout = false;//指示线程挂起时间是否到达  
 DataTable dt=null;

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (timeout)
            {
                timer1.Stop();
                timeout = false;
                progressBar1.Visible = false;//设置进度条样式为blocks  
            }  

        }
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
            timeout = false;
            progressBar1.Visible = true;
            progressBar1.MarqueeAnimationSpeed = 50;  
            progressBar1.Style = ProgressBarStyle.Marquee; 
           string where = 函数();  //得到where 查询条件
            System.Threading.Thread myThread;
            myThread = new System.Threading.Thread(myStartingMethod);
            myThread.Start(where);
          
          dgv.DataSource = dt;
        }
        /// <summary>
        /// 进行循环
        /// </summary>
        private void myStartingMethod(object where)
        {
           dt = 函数(where);     //
            timeout = true; 
        }

dgv.DataSource = dt;  dt为空,调式发现先执行的dgv.DataSource = dt;,然后再执行的mystart方法。
dgv.DataSource = dt;代码应该放在哪个位置。
------解决方案--------------------
dgv.DataSource = dt;

放在progressBar1.Visible = false;//设置进度条样式为blocks  

的后面试试。
------解决方案--------------------
你上面 声明的dt,只有在  dt = 函数(where);    这赋值了。
------解决方案--------------------
按你给出的代码的思路,应该放到timer里啊,进度条到头了之后,绑定数据