多线程问题,高手求救!
开了一个新线程往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);