线程操作时与窗体控件数据交换

 
线程中打开 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;

}
}

posted on 2010-04-17 21:28  西湖浪子  阅读(210)  评论(0)    收藏  举报