线程操作时与窗体控件数据交换
线程中打开 Form 窗体
private void button1_Click(object sender, EventArgs e)
{
Thread showThread = new Thread(new ThreadStart(ShowForm));
showThread.Start();
}
delegate void ShowCallback();
//private Form2 modForm = new Form2();
private void ShowForm()
{
if (this.InvokeRequired)
{
ShowCallback d = new ShowCallback(ShowForm);
this.Invoke(d, new object[] { });
}
else
{
//if (modForm.IsDisposed)
//{
// modForm = new Form2();
//}
Form2 modForm = new Form2();
modForm.Show();
}
}
**********************************************************************************************
如果您需要分层来读出数据的可以按下面的办法实现,可以用下面的代码参考一下:
private void button1_Click(object sender, EventArgs e)
{
Thread ht = new Thread(new ThreadStart(X1));
ht.Start();
}
private void X1()
{
data da = new data();
DataTable dt = new DataTable();
dt = da.getData();
//dataGridView1.DataSource = dt;
if (this.InvokeRequired)
{
updateDG ur = new updateDG(dataBin);
this.Invoke(ur, dt);
}
}
public delegate void updateDG(DataTable dt);
public void dataBin(DataTable dt)
{
dataGridView1.DataSource = dt;
return;
}
上面就是UI界面下的代码,需要分层就需要另建一个类,把数据读取出来并返回一个dataTable,代码在下面
public class data
{
IAsyncResult IAR;
public DataTable getData()
{
SqlConnection con;
SqlCommand com;
SqlDataReader dr;
DataTable dt = new DataTable();
try
{
con = new SqlConnection("UID=sa;Password=123;Initial Catalog=James;Data Source=192.168.20.139;Asynchronous Processing=true");
con.Open();
com = new SqlCommand("select top 100 * from tb_user", con);
IAR = com.BeginExecuteReader(); //异步
dr = com.EndExecuteReader(IAR);
dt.Load(dr);
}
catch
{
throw;
}
con.Dispose();
com.Dispose();
dr.Close();
return dt;
}
}
浙公网安备 33010602011771号