首页 新闻 会员 周边

.NET多线程复制数据库时,有些数据表复制不全

0
[已解决问题] 解决于 2016-04-12 16:25

Thread[] threads = new Thread[table_YuanLT.Length];

for (int i = 0; i < table_YuanLT.Length; i++)
{
//构造连接字符串
SqlConnectionStringBuilder builder_new = new SqlConnectionStringBuilder(conn_NewLT);

SqlConnectionStringBuilder builder_yuan = new SqlConnectionStringBuilder(conn_YuanLT);

string table_new = table_NewLT[i];
string table_yuan = table_YuanLT[i];
dataGridView1[0, i].Value = table_yuan;
dataGridView1[1, i].Value = table_new;
threads[i] = new Thread(() => InsertTable(builder_new.ConnectionString, builder_yuan.ConnectionString, table_new, table_yuan));
threads[i].IsBackground = true;
threads[i].Start();
//InsertTable(builder_new.ConnectionString, builder_yuan.ConnectionString, table_new, table_yuan);
threads[i].Abort();
}

定义了一组线程Thread[] threads = new Thread[table_YuanLT.Length];均需要调用 InsertTable(,,,,)函数

一碗周的主页 一碗周 | 菜鸟二级 | 园豆:203
提问于:2016-04-08 13:52
< >
分享
最佳答案
0

threads[i].Abort();干嘛?

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2016-04-08 14:47

我是第一次写有关线程的东西,线程用完不是要终止么?

一碗周 | 园豆:203 (菜鸟二级) | 2016-04-09 10:41

@Avanti: 不需要,相反你abort了反而有问题。你的期望可能是希望等待线程执行完再继续。

一般写法是var td=new Thread(....)

td.Join();

或者使用CountdownEvent控制数量较多的线程。

Daniel Cai | 园豆:10424 (专家六级) | 2016-04-11 09:34
其他回答(1)
0

线程可不要乱开关

Yu | 园豆:12980 (专家六级) | 2016-04-08 15:02

threads[i].Abort();这句删除后,当数据库表table_YuanLT[i]中的数据量非常大时,threads[i]就不调用InsertTable(,,,,)函数了,是怎么回事啊?

支持(0) 反对(0) 一碗周 | 园豆:203 (菜鸟二级) | 2016-04-10 15:56

@Avanti: 线程也不是想开多少就开多少的

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2016-04-12 15:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册