我有一个表单,并没有control.I试图从数据库中获取控件,所以我的项目是慢我认为我可以使用线程,但我得到一个错误。多线程错误
void Form_Load(object sender,EventArgs e)
{
SqlDataAdapter adap=new SqlDataAdapter("Select * from MyControls");
DataTable dt=new DataTable();
adap.Fiil(dt);
foreach(DataRow dr in dt.Rows)
{
ThreadStart ts=delegate{ Sample1(dr) };
Thread th=new Thread(ts);
th.start();
}
}
public void Sample1(DataRow dr)
{
this.Invoke(new AddControlsDelegate(AddControls),new object[] {dr });
}
public void AddControls(DataRow dr)
{
TextBox tx=new TextBox();
tx.Name=dr["Id"].ToString();
this.Controls.Add(tx);
}
public delegate void AddControlsDelegate(DataRow dr);
我试着用这个代码。但它不work.It加入相同的控制时间两次,3次,4次
哪里是我的错吗? 感谢
它的工作非常感谢lot.But控制一定要来“ID” asceding 有时它不来asceding – YardimaIhtiyaciOlan
也许你应该改变SQL和包括'ORDER BY Id' ... – Yahia
@YardimaIhtiyaciOlan:除了在SQL中排序时,不能控制线程实际执行的时间 - 顺序不能保证,要实现这一点,您需要一种不同的方法。此外,您当前的代码没有多大意义 - 使用多线程的开销并不值得您实际执行的操作。 – BrokenGlass