如何在winform中用委托做异步

不好意思,直接上代码了。

ContractedBlock.gifExpandedBlockStart.gifCode
delegate void VoidDelegate ();
VoidDelegate vd 
= DataBind;
vd.EndInvoke(vd.BeginInvoke(
nullnull));


所以delegate(委托)的基本东西还是要会的。有返回时候的后续操作的版本是:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
delegate DataView DataViewDelegate();

private void button1_Click(object sender, EventArgs e)
{
DataViewDelegate dvd 
= new DataViewDelegate(DataLoad);
dvd.BeginInvoke(DataBind, dvd);
}

private DataView DataLoad()
{            
SqlConnection conn 
= new SqlConnection(@"Data Source=cat\sqlexpress;Initial Catalog=Northwind;Integrated Security=True");
SqlDataAdapter ada 
= new SqlDataAdapter("select * from orders ;waitfor delay '00:00:5';", conn);
DataTable dt 
= new DataTable();

conn.Open();
ada.Fill(dt);
conn.Close();

DataView dv 
= new DataView(dt);              
return dv;
 }

        
private void DataBind(IAsyncResult ar)
        {
            
if (ar == nullthrow new ArgumentNullException("ar");
            DataViewDelegate dvd1 
= ar.AsyncState as DataViewDelegate;
            System.Diagnostics.Trace.Assert(dvd1 
!= null"Invalid object type ");

            DataView dv 
= dvd1.EndInvoke(ar);
          
            VoidDelegate vd 
= delegate()
            {
                dataGridView1.DataSource 
= dv;
                
this.dataGridView1.Enabled = true;
                
this.progressBar1.Visible = false;
                
this.button1.Enabled = true;
            };
            dataGridView1.Invoke(vd);
//由主线程上的控件来invoke委托
            
        }

委托就是用线程来做异步的(个人看法,还没有从书本或网络中了解到)。
关于异步,下一篇是ASP.NET中做异步的例子,比起网络中现有例子更生动的几个做法。

转载于:https://www.cnblogs.com/catcn/archive/2008/12/09/1351416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值