当我尝试连接到服务器套接字时,我的界面滞后,并且捕获没有运行。
这是我的代码:
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);
}
因此,我想在未连接到套接字时显示异常消息。
答案 0 :(得分:1)
简单地说,您需要异步执行所有这些操作。您的UI冻结(不是滞后-滞后意味着它正在缓慢运行,但正在移动,只落后了一段时间),因为通常会忙于绘制UI并保持其响应的线程正在等待连接,然后发送和接收数据
在您说过Connect
,Send
和Receive
的地方,这些分别是ConnectAsync
,SendAsync
和ReceiveAsync
。您需要进行其他代码更改才能使用异步方法,例如将自己的方法标记为异步,并在可能阻止的方法调用之前使用await
关键字。
通过切换为使用xAsync
方法,当您的UI即将阻塞以等待连接完成或数据传输时,代码将暂停其操作并返回绘制UI 。当有可用数据等时,它将被调回中断的位置,并进行处理
我还建议您不要在检查插座是否已连接的情况下尝试致电SendLoop
。