IAsyncResult
stateObject
首先说IAsyncResult,这个是一个接口 , 你在回调函数中通过参数获得的对象具体是什么类型的一般我们不需要关心,我们只需要依照这个接口的定义进行访问就可以了 。简单点说 , 这个接口规定了顺利完成异步操作所需信息的最小集合 。一般来说 , 我们需要通过这个参数(ar)来识别异步操作 。比如说,你在一瞬间发起一百个“从不同的网络连接获取数据”的异步请求,当某一个请求被完成的时候,如何判断是那个请求被完成呢?就是依靠回调函数的参数ar 。实际上你一般是不需要参与判断的,你只要将这个ar传递给EndXXX就可以了,EndXXX会根据这个ar自行判断的 。需要注意的是,这个ar就是你调用BeginXXX的时候的返回值,可以说是一个存根,如果你需要在完成操作前终止他,也可以通过将这个存根传递给EndXXX,EndXXX就会根据情况终止操作 。(IAsyncResult里面的IsCompleted提供了是否已经完成的判断,EndXXX就是根据这个值决定是否有必要终止 。当然,你不需要关心他 。)
接下来我们看看stateObject,这个东西被称为状态对象 。于是大家就可能奇怪了:那个ar不也是状态吗?实际上stateObject是一个留给用户使用的东西 , BeginXXX/EndXXX根本就不使用 。这个stateObject会被装到ar的AsyncState里面,也就是说这个stateObject可以随时通过访问存根(BeginXXX的返回值)或者回调函数里的ar得到,你完全没必要额外的保存到什么地方,更不需要费神的去考虑如何和你的某个异步操作对应起来 。说了半天,这个东西有什么用呢?你想怎么用就怎么用呗,发挥一下你的想象力 。比如说,你可以保存这是第几次操作,或者在多个异步操作之间要同步的时候可以作为信号旗,再或者直接是操作这个异步操作的对象(x.BeginXXX的时候将x传递到stateObject参数上) 。
第一种用法有点多余,第二种用法有点复杂,第三种我用得最多 。因为你很可能在协一个服务端,而服务段必须能够响应多个客户端 , 这决定了必须用异步 。同时,对于多个客户端必然有多个对象,例如网络连接的时候可能是Socket 。而实际上处理的方法或者协议是和具体哪个客户端没有关联的,因此我们只需要一套处理程序就够了 。这个时候第三种用法就很有用处,我们完全可以把代码写成这样:
SubDataReceived(ByValarAsIAsyncResult)
ar.AsyncState.EndReceive(ar)
ar.AsyncState.BeginReceive(...,ar.AsyncState)
EndSub
这样就不需要额外的数据结构去记录有那些正在活动的对象了 。
vb.net的随机3个数字,然后排序一下给你一个最简单的冒泡排序代码:
将三个数放到一个数组中 。
a(0)=val(text1.text):a(1)=val(text2.text):a(2)=val(text3.text)
dim flag as Boolean,temp as Integer
for i = 0 to 2
flag = true
for j = 2 to 1
if a(j)a(j-1) then
temp = a(j-1)
a(j-1) = a(j)
a(j) = temp
flag = false
end if
next j
if flag then Exit For
next i
text4.text=a(0):text5.text=a(1):text6.text=a(2)
【vb.net乱序函数 vb 乱码】vb.net乱序函数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于vb 乱码、vb.net乱序函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 天等网红直播,天等卫视
- sqlserver当日,sqlserver 当前时间
- 怎么加小程序的图片和视频,怎么加小程序的图片和视频呢
- 不大的单机游戏推荐,不大的单机游戏推荐知乎
- java小代码 java代码小程序
- 夏科硬盘怎么我,夏科硬盘怎么样
- 电商如何拖价,电商法降价退差价
- 杭州区块链技术电子印章,区块链数字印章系统技术规范
- mysql怎么打开控制台 mysql控制台执行sql文件