线程操作时与窗体控件数据交换
 
线程中打开 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号