在form1上面放了个dataSet1,和dateGridView1
在form1下有个函数 private SearchDB(string keyword)
{
OleDbConnection objConn = new OleDbConnection(...);
objConn.open();
for(int i =0;i<20;i++)
{
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM myRange1 where Title like %"+keyword+"%", objConn);
objCmdSelect.Fill(dataSet1, "XLData");
dateGridView1.DataSource =dataSet1.tables[0];
Thread.sleep(300);
}
objConn.close();
}然后用一个新线程来执行这个函数,用的是Invoke委派的方式,为什么程序界面还是卡死的样子,这个线程没有起到在后台悄悄运行的目的.请问各位我这样处理是不是有什么不妥的地方?
在form1下有个函数 private SearchDB(string keyword)
{
OleDbConnection objConn = new OleDbConnection(...);
objConn.open();
for(int i =0;i<20;i++)
{
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM myRange1 where Title like %"+keyword+"%", objConn);
objCmdSelect.Fill(dataSet1, "XLData");
dateGridView1.DataSource =dataSet1.tables[0];
Thread.sleep(300);
}
objConn.close();
}然后用一个新线程来执行这个函数,用的是Invoke委派的方式,为什么程序界面还是卡死的样子,这个线程没有起到在后台悄悄运行的目的.请问各位我这样处理是不是有什么不妥的地方?
dateGridView1.DataSource =dataSet1.tables[0]; 还在for里面 没看懂lz意思~
//伪代码
private void ThreadMain()
{
for(int n=0;n<count;n++)
list.Add(new ThreadStart(this.SearchDB);
}
被调用的方法是否产生了一个线程,open和close也没有做错误处理。
private SearchDB(string[] keyword)
{
OleDbConnection objConn = new OleDbConnection(...);
objConn.open();
for(int i =0;i <20;i++)
{
OleDbCommand objCmdSelect =new OleDbCommand( "SELECT * FROM myRange1 where Title like % "+keyword[i]+ "% ", objConn);
objCmdSelect.Fill(dataSet1, "XLData ");
dateGridView1.DataSource =dataSet1.tables[0];
Thread.sleep(300);
}
objConn.close();
}
private void Button1_click(Sender s,Eo e)//按一个按钮就开始执行
{
Thread t1=new ThreadStart(AutoRun);
t1.Start(); //启动线程t1
} private void delegate DRun(string[] keyword);
private void AutoRun()
{
string[] keyword=..........
form.invoke(new DRun(SearchDB,keyword));
}大家们帮我看看哈,怎样改进一下思路呢,太卡了
我是想用一个线程去运行所有的查询工作,因为我的查询次数不只20次,可能有几百次呢,如果开的线程太多了的话会太占资源.
我的电脑在家里,我现在在网吧上网,只能凭记忆写下这些代码,肯定有毛病,不过思路就是这样的.麻烦帮我看看问题的瓶颈在哪里呢?我应该如何来改改我的思路呢?