vb.net异步编程 vbnet doevent( 二 )


第一种用法有点多余 , 第二种用法有点复杂,第三种我用得最多 。因为你很可能在协一个服务端,而服务段必须能够响应多个客户端,这决定了必须用异步 。同时 , 对于多个客户端必然有多个对象,例如网络连接的时候可能是Socket 。而实际上处理的方法或者协议是和具体哪个客户端没有关联的,因此我们只需要一套处理程序就够了 。这个时候第三种用法就很有用处,我们完全可以把代码写成这样:
SubDataReceived(ByValarAsIAsyncResult)
ar.AsyncState.EndReceive(ar)
ar.AsyncState.BeginReceive(...,ar.AsyncState)
EndSub
这样就不需要额外的数据结构去记录有那些正在活动的对象了 。
求深入浅出讲解VB.NET下利用Async和Await实现异步的方法 。run需要一个action方法 。
这个方法用于用后台进程执行占用大量CPU的工作,你的for代码段应该写在里面 。
我没用过这个,粗略看了一下资料,实际情况与他的实例不太一样,Dim a As Task(of Boolean)=Await Doo(),直接提示错误,正确用法是去掉await 。
解决以上两个问题 , 测试运行通过 。(一个文本框滚数字,另一个打字无压力)
其实你的要求,不需要这么高级 。多线程应该可以 。
VB.NET 简单多线程多线程一般是不推荐用的,因为线程之间如果有共享资源的话会引起竞争 , 需要加锁处理vb.net异步编程;而且线程间没有时序关系,所以vb.net异步编程你在调试中可能会出现异步处理结束顺序与开始处理顺序不一致的情况(我在调试中已经发现该问题) 。
针对vb.net异步编程你提出的这个问题,采用了多线程处理,利用的是BackgroundWorker也就是异步处理控件进行了处理 。
代码已经经过调试通过 。欢迎交流,如有问题,留下QQ或其他联系方式 。
代码如下,并附程序截图 。
‘---------------------------------------------------
Imports System.ComponentModel '导入异步控件命名空间
Public Class Form1
Private howmany As Integer = 10
Private AnalysisNumber(0 To howmany - 1) As BackgroundWorker
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
creatNewBackgroundWorker()
addHandle()
startWork()
End Sub
Private Sub creatNewBackgroundWorker()
For i As Integer = 0 To AnalysisNumber.Length - 1
AnalysisNumber(i) = New BackgroundWorker
Next
End Sub
Private Sub addHandle()
For i As Integer = 0 To AnalysisNumber.Length - 1
AddHandler AnalysisNumber(i).DoWork, AddressOf AnalysisNumber_DoWork
AddHandler AnalysisNumber(i).RunWorkerCompleted, AddressOf AnalysisNumber_RunWorkerCompleted
Next
End Sub
Private Sub startWork()
For i As Integer = 0 To 9
Dim temp(0 To 9) As Integer
For j As Integer = 1 To 10
temp(j - 1) = 10 * i + j
Next
AnalysisNumber(i).RunWorkerAsync(temp)
Next
End Sub
Private Sub AnalysisNumber_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim data As Integer()
data = https://www.04ip.com/post/CType(e.Argument, Integer())
Dim temp As Integer
For i As Integer = 0 To data.Length - 1
temp = data(i)
data(i) = temp * temp
Next
e.Result = data
End Sub
Private Sub AnalysisNumber_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
Dim data As Integer()
data = https://www.04ip.com/post/CType(e.Result, Integer())
For i As Integer = 0 To data.Length - 1
ListBox1.Items.Add(data(i))
Next
End Sub
End Class
关于vb.net异步编程和vbnet doevent的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读