在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委派的方式,为什么程序界面还是卡死的样子,这个线程没有起到在后台悄悄运行的目的.请问各位我这样处理是不是有什么不妥的地方?

解决方案 »

  1.   

    为什么要for?而且objCmdSelect.Fill(dataSet1,       "XLData ");       
    dateGridView1.DataSource   =dataSet1.tables[0]; 还在for里面 没看懂lz意思~
      

  2.   

    我这个for只是举个例子,表明要查询很多次这样的数据,每次查询的内容不一样的,反正如果在主线程里面执行的话,必定卡死的.
      

  3.   

    多线程您写对了吗?
    //伪代码
    private void ThreadMain()
    {
        for(int n=0;n<count;n++)
            list.Add(new ThreadStart(this.SearchDB);
    }
    被调用的方法是否产生了一个线程,open和close也没有做错误处理。
      

  4.   

    嘿嘿,不好意思啊,我的代码比较繁杂,贴出来几大页呢,不过跟下面这个类似,
          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));
          }大家们帮我看看哈,怎样改进一下思路呢,太卡了
      

  5.   

    谢谢lxwin01:
       我是想用一个线程去运行所有的查询工作,因为我的查询次数不只20次,可能有几百次呢,如果开的线程太多了的话会太占资源.
       
       我的电脑在家里,我现在在网吧上网,只能凭记忆写下这些代码,肯定有毛病,不过思路就是这样的.麻烦帮我看看问题的瓶颈在哪里呢?我应该如何来改改我的思路呢?