Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net net使用Async和Wait with while true循环锁定UI_Vb.net_Winforms_Asynchronous_Async Await - Fatal编程技术网

Vb.net net使用Async和Wait with while true循环锁定UI

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

我有一个用WebSocketClient编写的VB.net winform应用程序,我已经搜索了好几天,找到了这个特定问题的一些文档化答案,但没有找到任何我可以使用的东西

我的用于与远程服务器对话的Async/await类使用了许多await语句,主要是sendasync和receiveasync。该应用程序在功能上与Signal聊天类型应用程序类似

我成功地连接到URI,接收欢迎消息并进行身份验证,仍然使用Async/Await。表单上启动WebSocketClient的按钮也被转换为WebSocketClient“等待”的异步方法

然后我进入一个while/true循环,该循环应该允许用户发送请求并从远程服务器接收反馈

我遇到的问题是UI锁定,当用户试图通过按钮单击发送请求时,完全没有响应

我在后台工作人员方面取得了一些成功,但我想使用Async/Await方法,因为它被广泛认为是一种更现代的方法

我无法确定如何获得一个异步/等待结构来模拟while循环,除非我的最终wait实现了一个while循环,我确信这与异步/等待的设计背道而驰,也可能会被锁定

有人能帮我通过这个障碍吗

谢谢大家

乔恩

为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