首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的UI在尝试连接到套接字时出现延迟?

我的UI在尝试连接到套接字时出现延迟?
EN

Stack Overflow用户
提问于 2019-05-14 18:12:23
回答 1查看 34关注 0票数 0

当我尝试连接到我的服务器套接字时,我的界面延迟,catch无法运行。

下面是我的代码:

代码语言:javascript
运行
复制
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);
}

因此,当我没有连接到套接字时,我希望显示异常消息。

EN

回答 1

Stack Overflow用户

发布于 2019-05-14 18:22:52

简单地说,您需要异步地完成所有这些操作。你的UI冻结了(没有滞后--滞后意味着它运行缓慢,但它正在移动,只是落后了一段时间),因为通常忙于绘制UI并保持响应的线程正在等待连接连接,然后它就会发送和接收数据

你说的ConnectSendReceive,应该是ConnectAsyncSendAsyncReceiveAsync。您还需要进行其他代码更改才能使用异步方法,例如将您自己的方法标记为异步方法,并在可能阻塞的方法调用之前使用await关键字。

通过切换到使用xAsync方法,当您的UI在等待连接完成或数据传输时被阻塞时,代码将暂停它正在做的事情,并返回到绘制UI。当数据可用时等,它将被调用回到它停止的地方,并继续处理

我还建议您不要尝试在检查套接字是否连接的情况下调用SendLoop

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56128010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档