我的数据在dataGridView里,我想把他导出到excel中,代码如下:for (int i = 1; i <= dataGridView1.Rows.Count-1; i++)
    {
      for (int j = 0; j < dataGridView1.Columns.Count; j++)
         {
            xSheet.get_Range(((Char)(65 + j)) + i.ToString(), Type.Missing).Value2 = dataGridView1[j, i - 1].Value.ToString();
            label2.Text = "共" + dataGridView1.Rows.Count.ToString() + "行,现已导出" + i.ToString() + "行!";  //这行的问题!
Type.Missing).Value2 = dt.Rows[i][j].ToString();
         }
     }
问题是:我现在如何做一个进程,单独显示已导出多少行,共多少行,怎么传参到新的线程里,让他的值改变?

解决方案 »

  1.   

    给你段代码,参考:
            private void button1_Click(object sender, EventArgs e)
            {
                Thread newThread = new Thread(new ThreadStart(Run));
                newThread.Start();
                button1.Enabled = false;
                CreateControl("System.Windows.Forms.TextBox", this, 10, 10);
            }        private void Run()
            {
                MethodInvoker mi = new MethodInvoker(UpdateProgress);
                while (true)
                {
                    Invoke(mi);                            
                    Thread.Sleep(10);
                }
                
            }        private void UpdateProgress()
            {
                i++;
                if (i % 100 == 0)
                {
                    progressBar1.Increment(1);
                }
                button1.Text = i.ToString();
                if (progressBar1.Value == 10)
                {
                    button1.Enabled = true;
                }
                if (progressBar1.Value == 80)
                {
                    Thread.CurrentThread.Abort();
                    this.Close();
                }
            }
      

  2.   

    如何弹出一个模式窗口来显示进度条
    ref:
    http://blog.csdn.net/knight94/archive/2006/05/27/757351.aspx
      

  3.   

    不是有一个控件吗叫什么backgroudwork,像你这种情况正好适合好,只不过显示一个进程条,搞什么多线程,
      

  4.   

    for (int i = 1; i <= dataGridView1.Rows.Count-1; i++)
        {
          showCountDelegate MyDelegate = showCountDelegate(i,dataGridView1.Rows.Count)
          {
               System.Console.WriteLine("daochu:{0} zonggong{1}",i,dataGridView1.Rows.Count);
           };
           this.invoke(MyDelegate,new object[]{i,dataGridView1.Rows.Count});
          for (int j = 0; j < dataGridView1.Columns.Count; j++)
             {            
                xSheet.get_Range(((Char)(65 + j)) + i.ToString(), Type.Missing).Value2 = dataGridView1[j, i - 1].Value.ToString();
                label2.Text = "共" + dataGridView1.Rows.Count.ToString() + "行,现已导出" + i.ToString() + "行!";  //这行的问题!
    Type.Missing).Value2 = dt.Rows[i][j].ToString();
             }
         }delegate void showCountDelegate(int i,int count);
    这样试试呢?
      

  5.   

    用一个共享变量保存进度状况
    工作线程工作在适当的地方,修改该变量,并且释放一个信号量,
    UI线程在循环等待信号量,一旦等到,就更新进度条显示要做简单点也可以不用信号量,UI线程定时查询就可以了