异步的优越性_小示例

当我们执行一项需长时间完成的查询操作,然后在窗体中显示一条消息.当使用同步数据访问,会发生窗体没反映的问题,解决的办法就是采用异步.

eg. 

//button_Click 事件

{

SqlConnectionStringBuilder cnSettings;

cnSettings=new SqlConnectionStringBuilder("server=.;database=pubs; Integrated Security=True;Max pool Size=5;async=true;");

try

{cn.Open();

SqlCommand cmd=cn.CreateCommand();

cmd.CommandText="WaitFor Delay '00:00:15' Select @@Version";

cmd.BeginExecuteReader(new AsynCallback(ProcessResult),cmd);

}

finally

{

cn.Close();

}

private void ProcessResult(IAsyncResult ar)

{

SqlCommand cmd=(SqlCommand)ar.AsyncState;

using(cmd.Connection)

{

using(cmd)

{

string ver=null;

SqlDataReader rdr=cmd.EndExecuteReader(ar);

if(rdr.Read())

{

ver=(string)rdr[0];

label1.BeginInvoke(new labelHandler(UpdateLabel),ver);

}

}

}

}

public delegate void labelHandler(string text);

public void UpdateLabel(string text)

{

label1.Text=text;

}

//需要注意的是,在数据连接字段中,要设置async=true;

这样的话,窗口就不会出现不能操作的问题了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值