点击文中的button后,在socket连接不通的情况下,所在的form窗体会假死。该如何解决此问题?

时间:2022-11-28 20:23:53
点击文中的button后,在socket连接不通的情况下,所在的form窗体会假死。该如何解决此问题?  

 
    private void okBtn_Click(object sender, EventArgs e)
        {
            this.ip = ipTB.Text;
            String port = portTB.Text;
            this.path = textBox1.Text;
            if (this.ip == "" || port == "" || this.path == "")
            {
                showLB1.Text = "ip,port和文件的输入框不能为空!";
                showLB1.Refresh();
            }
            else
            {
                this.port = int.Parse(port);
                try
                {
                lable:
                    //创建终结点EndPoint
                    IPAddress ipaddress = IPAddress.Parse(this.ip);
                    IPEndPoint ipe = new IPEndPoint(ipaddress, this.port);

                    //创建Socket并连接到服务器
                    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   //  创建Socket
                    showLB1.Text = "Connecting...";
                    showLB1.Refresh();
                    try
                    {
                        socket.Connect(ipe); //连接到服务器
                        showLB1.Text = "socket连接成功,准备接收数据...";
                        showLB1.Refresh();
                    }
                    catch (Exception ee)
                    {
                        showLB1.Text = "连接失败,正在重试,请稍后! ";
                        goto lable;
                    }
}

5 个解决方案

#1


用非阻塞模式,或者把socket操作放到异步中

#2


改为异步或者加滚动条……

#3


引用 1 楼 bdmh 的回复:
用非阻塞模式,或者把socket操作放到异步中


能写点代码指导么,谢谢!本人是很新的新手

#4


开个线程专门处理Socket

#5


socket有他的异步方法
因为有阻塞,所以你界面卡主了
异步的话不等返回,程序会继续往下走
连接结果是在异步回调处理的好像

#1


用非阻塞模式,或者把socket操作放到异步中

#2


改为异步或者加滚动条……

#3


引用 1 楼 bdmh 的回复:
用非阻塞模式,或者把socket操作放到异步中


能写点代码指导么,谢谢!本人是很新的新手

#4


开个线程专门处理Socket

#5


socket有他的异步方法
因为有阻塞,所以你界面卡主了
异步的话不等返回,程序会继续往下走
连接结果是在异步回调处理的好像