Vb.net net使用Async和Wait with while true循环锁定UI
我有一个用WebSocketClient编写的VB.net winform应用程序,我已经搜索了好几天,找到了这个特定问题的一些文档化答案,但没有找到任何我可以使用的东西 我的用于与远程服务器对话的Async/await类使用了许多await语句,主要是sendasync和receiveasync。该应用程序在功能上与Signal聊天类型应用程序类似 我成功地连接到URI,接收欢迎消息并进行身份验证,仍然使用Async/Await。表单上启动WebSocketClient的按钮也被转换为WebSocketClient“等待”的异步方法 然后我进入一个while/true循环,该循环应该允许用户发送请求并从远程服务器接收反馈 我遇到的问题是UI锁定,当用户试图通过按钮单击发送请求时,完全没有响应 我在后台工作人员方面取得了一些成功,但我想使用Async/Await方法,因为它被广泛认为是一种更现代的方法 我无法确定如何获得一个异步/等待结构来模拟while循环,除非我的最终wait实现了一个while循环,我确信这与异步/等待的设计背道而驰,也可能会被锁定 有人能帮我通过这个障碍吗 谢谢大家 乔恩Vb.net net使用Async和Wait with while true循环锁定UI,vb.net,winforms,asynchronous,async-await,Vb.net,Winforms,Asynchronous,Async Await,我有一个用WebSocketClient编写的VB.net winform应用程序,我已经搜索了好几天,找到了这个特定问题的一些文档化答案,但没有找到任何我可以使用的东西 我的用于与远程服务器对话的Async/await类使用了许多await语句,主要是sendasync和receiveasync。该应用程序在功能上与Signal聊天类型应用程序类似 我成功地连接到URI,接收欢迎消息并进行身份验证,仍然使用Async/Await。表单上启动WebSocketClient的按钮也被转换为WebS
为True时
如果jsonRequestText为“”,则
jsonResponseText=Encoding.UTF8.GetString(bytesReceived.Array,0,result.Count)
bytesToSend=newarraysegment(字节的)(Encoding.UTF8.GetBytes(jsonRequestText))
等待ws.SendAsync(bytesToSend、WebSocketMessageType.Text、True、Threading.CancellationToken.None)
bytesReceived=新数组(字节的)(新字节(1023){})
结果=等待ws.ReceiveAsync(bytesReceived,Threading.CancellationToken.None)
jsonResponseText=Encoding.UTF8.GetString(bytesReceived.Array,0,result.Count)
jsonRequestText=“”
如果结束
如果jsonResponseText为“”,则
等待ConsumerResponseAsync(jsonResponseText)
jsonResponseText=“”
如果结束
结束时
我正在使用websocketclient,一旦我连接并验证,我就会进入发布的循环。我正在努力研究如何使用异步等待方法复制此循环,即不使用while/true。您需要发布代码。还不清楚while/true循环如何允许用户发送请求和接收反馈。由于您使用的是WinForms,因此您处于事件驱动平台中,
while(true)
循环通常不受欢迎,更不用说在主线程中运行了。我无法确定如何获得异步/等待结构来模拟while循环
-您在上等待,并且当您的事件发生时,应该会中断循环,谢谢大家,我开始把一些代码放在一起演示,但是有很多代码,我真的需要写一个精简版,我开始了-我完全同意Jimi,我真的不想用一段时间(真的)-然后我读了格斯伯格的回复,它准确地指引了我需要去的地方,我想。再次感谢两位。
While True
If jsonRequestText <> "" Then
jsonResponseText = Encoding.UTF8.GetString(bytesReceived.Array, 0, result.Count)
bytesToSend = New ArraySegment(Of Byte)(Encoding.UTF8.GetBytes(jsonRequestText))
Await ws.SendAsync(bytesToSend, WebSocketMessageType.Text, True, Threading.CancellationToken.None)
bytesReceived = New ArraySegment(Of Byte)(New Byte(1023) {})
result = Await ws.ReceiveAsync(bytesReceived, Threading.CancellationToken.None)
jsonResponseText = Encoding.UTF8.GetString(bytesReceived.Array, 0, result.Count)
jsonRequestText = ""
End If
If jsonResponseText <> "" Then
Await ConsumeResponseAsync(jsonResponseText)
jsonResponseText = ""
End If
End While