关于异步编程(一)

    让我们来看看同步异步的区别:
    同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果
    异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作
   

    .NET框架基类库中有好几种类都可以提供同步和异步的方法调用。
因为同步方法调用会导致程序流程中途等待,所以采用同步方法的情况下往往会导致程序执行的延迟
相比来说,在某些条件下选择异步方法调用就可能更好一些
例如,有的时候程序需要给多个Web服务发出请求,还有远程处理信道(HTTP、TCP)和代理,这时就最好采用异步方法

.NET Framework允许异步调用任何方法,定义与需要调用的方法具有相同签名的委托
CLR将自动为该委托定义添加适当签名的BeginInvoke虚方法和EndInvoke虚方法和Invoke方法。

关于委托的这3个方法的详细说明可以参考这文章
http://www.cnblogs.com/aierong/archive/2005/05/25/162181.html

我们先来了解这2个方法和一个委托和一个接口:
(1)
BeginInvoke方法用于启动异步调用
它与您需要异步执行的方法具有相同的参数,只不过还有两个额外的参数,将 AsyncCallback 和 AsyncState(可通过 IAsyncResult 接口的

AsyncState 属性获得)作为最后两个参数,如没有可以为空.
BeginInvoke立即返回,不等待异步调用完成。
BeginInvoke返回IasyncResult,可用于监视调用进度。

结果对象IAsyncResult是从开始操作返回的,并且可用于获取有关异步开始操作是否已完成的状态。
结果对象被传递到结束操作,该操作返回调用的最终返回值。
在开始操作中可以提供可选的回调。如果提供回调,在调用结束后,将调用该回调;并且回调中的代码可以调用结束操作。

(2)
EndInvoke方法用于检索异步调用结果。
在调用BeginInvoke后可随时调用EndInvoke方法,注意:始终在异步调用完成后调用EndInvoke.
如果异步调用未完成,EndInvoke将一直阻塞到异步调用完成。
EndInvoke的参数包括需要异步执行的方法的out和ref参数以及由BeginInvoke返回的IAsyncResult。
要注意的是,始终在异步调用完成后调用EndInvoke

(3)
AsyncCallback委托用于指定在开始操作完成后应被调用的方法
AsyncCallback委托被作为开始操作上的第二个到最后一个参数传递
代码原型如下:
[Serializable]
public delegate void AsyncCallback(IAsyncResult ar);

(4)
IAsyncResult接口
它表示异步操作的状态.
该接口定义了4个公用属性

 

    以上转自http://www.cnblogs.com/panjun-Donet/archive/2008/09/04/1284700.html

 

    现在有这样一个需求:在一个FORM中,里边有个按钮的单击事件,当我们单击按钮时候会调用服务器的一个方法。 要求是:当单击时候调用方法的同时会弹出一个GIF图片窗体,表示程序当前正在运行,当调用完成后,关闭该GIF图片窗体。

    步骤1.新建一个窗体,上边放一个PICBOX控件,PICBOX控件上边放张GIF图片,窗体设置成没有标题栏,同时拖入一个TIMER控件。  在该窗体的代码窗口中添加如下代码

   

    在窗体的LOAD事件中

   

    在TIMER的TICK时间中插入

   

 

    2.回到我们主窗体的BUTTON_CLICK事件。

    我们在该窗体先定义一个委托

    public delegate void DeleteAA();

    添加一个方法用来调用服务器方法

   

    然后看我们BUTTON_CLICK事件

   

 

    大概效果就出来了

    效果图

 

    由于刚刚开始接触,所以还有些东西很难理解..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值