日期:2014-05-19  浏览次数:20883 次

多线程问题,高手求救!
开了一个新线程往SQLSERVER中导入海量数据,一次性导入数W条的时候正常,一次性导入数十W条的时候报如下错误:

"CLR   无法从   COM   上下文   0x1b0de8   转换为   COM   上下文   ox1b1010,这种状态已持续   60   秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送   Windows   消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如   CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。"
请高手帮忙解决:代码如下:
private   void   bnResultsInsertSQLDB_Click(object   sender,   EventArgs   e)
                {
                        lbProcessInfoIndex.Visible   =   true;
                        tdThread   =   new   Thread(new   ThreadStart(fnIndexInsertDB));
                        tdThread.TrySetApartmentState(ApartmentState.STA);
                        tdThread.Start();
                       

                }
private   void   fnIndexInsertDB()
                {
                        dsDataSource   =   CindexSearch.fnReturnDataSource(CMainClass.szDefaultPickAllIndex);
                        DataTable   dtDataSource   =   CindexSearch.fnAddNewDataColumn(dsDataSource.Tables[ "dtDataSource "],   "FileExtension ",   0,   1,   4,lbProcessInfoIndex);
                        CMainClass.fnIndexInsertSQLDB(dtDataSource,   "filemaininfo ",   "所有文件索引信息已成功导入数据库! ");
                        tdThread.Abort();
                }
public   DataSet   fnReturnDataSource(string   szKeyWords)
                {
                        CqueryHelper.QuerySelectColumns   =   "FileName,Path,Size ";
                        string   szSqlQuery   =   CqueryHelper.GenerateSQLFromUserQuery(szKeyWords);
                        if(szKeyWords==CMainClass.szDefaultPickAllIndex)
                                szSqlQuery   =   szSqlQuery.Substring(0,   szSqlQuery.IndexOf( "WHERE ")   -   1);
                        //MessageBox.Show(szSqlQuery);
                        OleDbConnection   odcConnection   =   new   OleDbConnection(CqueryHelper.ConnectionString);
                        OleDbDataAdapter   odaAdapter   =   new   OleDbDataAdapter(szSqlQuery,   odcConnection);