当我尝试连接到我的服务器套接字时,我的界面延迟,catch无法运行。
下面是我的代码:
protected void OnButtonClicked(object sender, EventArgs args)
{
if (!clientSocket.Connected)
{
try
{
clientSocket.Connect("172.20.10.4", 100);
}
catch (SocketException)
{
gettext.Text = "Couldn't Connect";
}
}
SendLoop();
}
private void SendLoop()
{
gettext.Text = "get ivi type";
string req = gettext.Text;
byte[] buffer = Encoding.ASCII.GetBytes(req);
clientSocket.Send(buffer);
byte[] BuffRec = new byte[1024];
int rec = clientSocket.Receive(BuffRec);
byte[] data = new byte[rec];
Array.Copy(BuffRec, data, rec);
gettext.Text = Encoding.ASCII.GetString(data);
}因此,当我没有连接到套接字时,我希望显示异常消息。
发布于 2019-05-14 18:22:52
简单地说,您需要异步地完成所有这些操作。你的UI冻结了(没有滞后--滞后意味着它运行缓慢,但它正在移动,只是落后了一段时间),因为通常忙于绘制UI并保持响应的线程正在等待连接连接,然后它就会发送和接收数据
你说的Connect,Send和Receive,应该是ConnectAsync,SendAsync和ReceiveAsync。您还需要进行其他代码更改才能使用异步方法,例如将您自己的方法标记为异步方法,并在可能阻塞的方法调用之前使用await关键字。
通过切换到使用xAsync方法,当您的UI在等待连接完成或数据传输时被阻塞时,代码将暂停它正在做的事情,并返回到绘制UI。当数据可用时等,它将被调用回到它停止的地方,并继续处理
我还建议您不要尝试在检查套接字是否连接的情况下调用SendLoop。
https://stackoverflow.com/questions/56128010
复制相似问题