SLa*_*aks 14
该IAsyncCallback接口不存在,因此您无法实现它.
我怀疑你真的想知道IAsyncResult界面.
我建议您在MSDN上阅读此页面.
的IAsyncResult接口表示的操作(例如,web请求或数据库呼叫),其在后台运行,同时您的代码继续执行.它可以告诉你操作是否完成(IsCompleted属性).它还为您提供了一个WaitHandle对象(AsyncWaitHandle属性),可用于等待操作完成.(通过电话result.AsyncWaitHandle.WaitOne())
你IAsyncResult通过调用BeginWhatever方法得到一个.(BeginExecuteReader,BeginGetResponse和许多其他人).该BeginWhatever方法将采用操作所需的任何参数(例如,BeginExecuteReader可以采用CommandBehavior参数),并且可以采用AsyncCallback委托(不是接口)和状态参数.返回一个IAsyncResult对象.
AsyncCallback委托是您提供的方法,将在操作完成时调用.它通常会在不同的线程上调用,所以要小心.您的AsyncCallback方法将获得与该BeginWhatever方法之前提供的相同的IAsyncResult .state参数被放入IAsyncResult并被系统忽略; 您可以在AsyncCallback方法中使用它来跟踪操作的用途.(国家可以是你想要的任何东西,包括null)
在AsyncCallback(或其他任何地方)中,您可以调用与您首先调用的EndWhatever方法相对应的BeginWhatever方法.您必须BeginWhatever从AsyncCallback或从AsyncCallback 向它提供IAsyncResult .当你调用它时,它将等待操作完成(如果它还没有完成),然后返回操作的结果.(假设操作返回一些东西;例如,WebRequest.EndGetResponse将返回a WebResponse).如果在操作期间发生任何错误,EndWhatever将抛出异常.
如果要创建可在后台运行的自己的操作,则可以实现IAsyncResult.您还将分别创建BeginWhatever和EndWhatever返回并接受它的方法.有关实现IAsyncResult的更多信息,请参见此处.
使用同步回调,调用方法(或线程)必须等到被调用的方法完成才能进行处理 - 就像"普通"方法调用一样.
通过异步回调,调用方法(或线程)可以继续处理其他输入或事件或其他任何事情,而无需等待被调用的方法完成.
对于应用程序用户界面线程,如果您不希望它在应用程序执行某个冗长的过程时"冻结",则需要使用异步回调.
| 归档时间: |
|
| 查看次数: |
7766 次 |
| 最近记录: |