读取电子表格的数据到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();
当读取时候,调出另外一个窗体,窗体上有个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();
以下是按钮事件:
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];
--------------------------
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]; }
调用的时候,你的主线程正在做着读表格的事情。你这段逻辑本身就有问题。
你应该是把读数据放到一个线程里去做,而不是把显示窗口放到单独的线程了,显示窗口还是在主线程就可以。
但是还有个问题:开始读取电子表格后,在主线程中调用另外一个窗体form3--用于显示“正在处理”字样的提示。
程序处理完成后,form3不能自动关闭。
----------
form3在主线程中显示:
Form3 fm3 = new Form3();
fm3.Show();
---------
子线程中读取电子表格数据到grid,读取完毕后,form3不能close;
在子线程中 不能调用fm3.
本来想在子线程中读取电子表格结束后,fm3.close();关闭form3,但是不能这样写;
重新实例化form3 为 myform3,myform3.close() 也不行啊。