读取电子表格的数据到Datagridview控件中,电子表格数据量大。
当读取时候,调出另外一个窗体,窗体上有个Label,上面写:“正在处理,请稍等...”
    但是读完电子表格后,提示信息才能出来,并且不能自动消失。
   请高手指点!   private delegate void setText();  
   
    public void Threadp()
        {
            setText d = new setText(ThreadOne);
            this.Invoke(d);
        }      public void  ThreadOne()    
        {
            Form3 fm3 = new Form3();
            fm3.Show();
           
        }以下代码在读取按钮中:
           Thread MyThreadOne = new Thread(new ThreadStart(Threadp));
            MyThreadOne.Start();

解决方案 »

  1.   

      顺序没有问题,
      以下是按钮事件:
    private void button2_Click(object sender, EventArgs e)
            {
                
                if (textBox1.Text == "")
                {
                    MessageBox.Show("请先选择.xls文件!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    return;
                }            Thread MyThreadOne = new Thread(new ThreadStart(Threadp));
                  MyThreadOne.Start();
       }
      

  2.   

    按钮事件中调取电子表格数据的grid我没有黏贴:
       DataSet objDataset1 = new DataSet();
       objDataset1 = ImportExcelToDataSet(filename);//读电子表格函数
       dataGridView1.DataSource = objDataset1.Tables[0];
    --------------------------
    private void button2_Click(object sender, EventArgs e)
      {
        
      if (textBox1.Text == "")
      {
      MessageBox.Show("请先选择.xls文件!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
      return;
      }  Thread MyThreadOne = new Thread(new ThreadStart(Threadp));
      MyThreadOne.Start();    DataSet objDataset1 = new DataSet();
        objDataset1 = ImportExcelToDataSet(filename);//读电子表格函数
        dataGridView1.DataSource = objDataset1.Tables[0];  }
      

  3.   

    Invoke是回到主线程同步调用,
    调用的时候,你的主线程正在做着读表格的事情。你这段逻辑本身就有问题。
    你应该是把读数据放到一个线程里去做,而不是把显示窗口放到单独的线程了,显示窗口还是在主线程就可以。
      

  4.   

       谢谢。这样基本上可以了。
    但是还有个问题:开始读取电子表格后,在主线程中调用另外一个窗体form3--用于显示“正在处理”字样的提示。
       程序处理完成后,form3不能自动关闭。
    ----------
    form3在主线程中显示:
       Form3  fm3 = new Form3();
               fm3.Show(); 
    ---------
       子线程中读取电子表格数据到grid,读取完毕后,form3不能close;
    在子线程中 不能调用fm3.
       本来想在子线程中读取电子表格结束后,fm3.close();关闭form3,但是不能这样写;
    重新实例化form3 为 myform3,myform3.close() 也不行啊。