vb.net异步编程 vba 异步( 二 )


第一种用法有点多余,第二种用法有点复杂,第三种我用得最多 。因为你很可能在协一个服务端,而服务段必须能够响应多个客户端 , 这决定了必须用异步 。同时,对于多个客户端必然有多个对象,例如网络连接的时候可能是Socket 。而实际上处理的方法或者协议是和具体哪个客户端没有关联的,因此我们只需要一套处理程序就够了 。这个时候第三种用法就很有用处,我们完全可以把代码写成这样:
SubDataReceived(ByValarAsIAsyncResult)
ar.AsyncState.EndReceive(ar)
ar.AsyncState.BeginReceive(...,ar.AsyncState)
EndSub
这样就不需要额外的数据结构去记录有那些正在活动的对象了 。
400分求vb.net,求一个socket的编程实例,详细见问题补充:至少需要
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Text
还要了解异步与委托
简单点的话
sub tcplisten() '监听过程
Const LPort As Integer = 6850 '本地监听端口
Dim IPadd As IPAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList(1) ’本地IP
'addresslist里面包括IPV6和IPV4
Dim IPEP As New IPEndPoint(IPadd, LPort) '结点
TCPL = New TcpListener(IPEP) ’建立监听实例
TCPL.Start() '开始监听
If TCPL.Pending = True Then '如果有连接接入
Dim TCPLX As New Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp) '建立一个新的SOCKET
TCPLX=TCPL.Accept() ’将第一个接入挂起的连接传给新建SOCKET,因为监听的SOCKET还要继续监听
dim Ripep asnew ipendpoint=TCPLX.RemoteEndPoint '此时获得远程的ip与端口号
listbox.add(ripep.ip)
dim buff as byte()
buff=TCPLX.Receive() 'listenacceptrecieve这时候可以接受数据了
dim s as string=Encoding.Default.GetString(buff) '转换成文本
msg "s"
TCPLX.send(buff) '这个是发送
end if
End Sub
长时间没写,可能有点小错误 , 你自己调试调试 , 大概步骤就是listenacceptrecieve,最好看看msdn,那个学起来才系统
VB.net多线程编程问题你可以在timer前用if判断网络状态,
如断开,可用
threading.Thread.Sleep(10000)‘当前线程挂起10秒
’可以开一个新线程去读取脱机数据 。
如连接,则继续执行 。
补充:
dim i as integer
'超过100次退出 , 避免死循环
for i=0 to 100
try
'ping你的端口
if ‘ok
exit for
else
threading.Thread.Sleep(10000)‘当前线程挂起10秒
end
Catch ex As Exception
End Try
next
求深入浅出讲解VB.NET下利用Async和Await实现异步的方法 。run需要一个action方法 。
这个方法用于用后台进程执行占用大量CPUvb.net异步编程的工作vb.net异步编程,vb.net异步编程你的for代码段应该写在里面 。
我没用过这个,粗略看了一下资料,实际情况与他的实例不太一样,Dim a As Task(of Boolean)=Await Doo(),直接提示错误 , 正确用法是去掉await 。
解决以上两个问题,测试运行通过 。(一个文本框滚数字,另一个打字无压力)
其实你的要求,不需要这么高级 。多线程应该可以 。
请教VB.net中怎么跨线程调用控件.建立委托 。
Me.Invoke——同步委托
或者 Me.BeginInvoke——异步委托
例:Me.Invoke(Sub
Textbox.Text="这是一个示例"
End Sub)
VB.NET 简单多线程多线程一般是不推荐用的,因为线程之间如果有共享资源的话会引起竞争,需要加锁处理;而且线程间没有时序关系,所以你在调试中可能会出现异步处理结束顺序与开始处理顺序不一致的情况(我在调试中已经发现该问题) 。

推荐阅读