欢迎来到天天文库
浏览记录
ID:14112709
大小:59.00 KB
页数:10页
时间:2018-07-26
《使用异步方式调用同步方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、使用异步方式调用同步方法http://msdn.microsoft.com/zh-cn/library/2e08f6yc(v=VS.90).aspx主页技术资源库学习下载支持社区登录
2、UnitedStates-English
3、
4、MSDNLibrary开发工具和语言VisualStudio2008VisualStudioVisualStudio中的.NETFramework编程.NETFramework高级开发异步编程设计模式使用委托进行异步编程使用异步方式调用同步方法异步委托编程示例社区内容添加代码示例和提示以增强此主题。更多...使用异步方式调用同步方法
5、VisualStudio2008其他版本.NETFramework4VisualStudio2005更新:2008年7月.NETFramework允许您异步调用任何方法。为此,应定义与您要调用的方法具有相同签名的委托;公共语言运行时会自动使用适当的签名为该委托定义BeginInvoke和EndInvoke方法。说明:.NETCompactFramework中不支持异步委托调用,也就是BeginInvoke和EndInvoke方法。BeginInvoke方法启动异步调用。该方法与您需要异步执行的方法具有相同的参数,还有另外两个可选参数。第一个参数是一个Asy
6、ncCallback委托,该委托引用在异步调用完成时要调用的方法。第二个参数是一个用户定义的对象,该对象将信息传入回调方法。BeginInvoke会立即返回,而不等待异步调用完成。BeginInvoke返回一个可用于监视异步调用进度的IAsyncResult。EndInvoke方法检索异步调用的结果。在调用BeginInvoke之后随时可以调用该方法。如果异步调用尚未完成,则EndInvoke会一直阻止调用线程,直到异步调用完成。EndInvoke的参数包括您需要异步执行的方法的out和ref参数(在VisualBasic中为ByRef和ByRe
7、f)以及由BeginInvoke返回的IAsyncResult。说明:VisualStudio2005中的IntelliSense功能显示BeginInvoke和EndInvoke的参数。如果您没有使用VisualStudio或类似工具,或您使用的是带有VisualStudio2005的C#,请参见异步编程概述以获取为这些方法定义的参数的说明。本主题中的代码示例演示了使用BeginInvoke和EndInvoke进行异步调用的四种常用方法。调用BeginInvoke之后,您可以执行下列操作:进行某些操作,然后调用EndInvoke一直阻止到调用完成。使用I
8、AsyncResult.AsyncWaitHandle属性获取WaitHandle,使用其WaitOne方法一直阻止执行直到发出WaitHandle信号,然后调用EndInvoke。轮询由BeginInvoke返回的IAsyncResult,以确定异步调用何时完成,然后调用EndInvoke。将用于回调方法的委托传递给BeginInvoke。异步调用完成后,将在ThreadPool线程上执行该方法。回调方法调用EndInvoke。重要说明:无论您使用何种方法,都要调用EndInvoke来完成异步调用。定义测试方法和异步委托-----------------
9、---------------------------------------------------------------下面的代码示例演示异步调用同一个长时间运行的方法TestMethod的各种方式。TestMethod方法会显示一条控制台消息,说明该方法已开始处理,休眠了几秒钟,然后结束。TestMethod有一个out参数,该参数用于演示此种参数添加到BeginInvoke和EndInvoke的签名中的方式。您可以按同样的方式处理ref参数。下面的代码示例演示TestMethod的定义和名为AsyncMethodCaller的、可用来异步调用Te
10、stMethod的委托。若要编译代码示例,必须包括TestMethod的定义和AsyncMethodCaller委托。VBC#C++F#JScript复制usingSystem;usingSystem.Threading;namespaceExamples.AdvancedProgramming.AsynchronousOperations{publicclassAsyncDemo{//Themethodtobeexecutedasynchronously.publicstringTestMethod(intcallDuration,outintthrea
11、dId){Console.WriteLine("Testmetho
此文档下载收益归作者所有