c#创建带参数的线程和不带参数的线程(分别以TCP和UDP监听为例),并且随主程序关闭

背景

需要写一个TcpClient的数据监听。为了实现不间断监听,需要写一个无限循环的线程。后来又需要写一个带参数的函数线程,也列在此。
using System.Threading;

1. 不带参数的线程

1.1代码实现

        private void ZQWLconnect()
        {
        	//新建线程
            Thread threadTCPClientListener = new Thread(TCPListening);
            //启动线程
            threadTCPClientListener.Start();
            //随主窗体关闭
            threadTCPClientListener.IsBackground = true;
        }

        private void TCPListening()
        {
            //新建TcpClient 并随后进行连接
            TcpClient clientSocketZQWLPort01RTK = new TcpClient();
            clientSocketZQWLPort01RTK.Connect("192.168.1.253", 1030);
			
            NetworkStream serverStream = clientSocketZQWLPort01RTK.GetStream();
            byte[] outStream = Encoding.ASCII.GetBytes("$");
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();
            byte[] inStream = new byte[10025];
            while(true)
            {
                if(clientSocketZQWLPort01RTK.Available!=0)
                {
                    serverStream.Read(inStream, 0, inStream.Length);
                    string returndata = System.Text.Encoding.ASCII.GetString(inStream);
                    Debug.WriteLine(returndata);

                }
            }
        }

2.带参数的线程

2.1代码示例:

其中,TextBoxPCPort是一个文本控件。

        private void MainForm_Load(object sender, EventArgs e)
        {

            Thread threadUDPlisting = new Thread(unused => UDPListener(IPAddress.Any, int.Parse( TextBoxPCPort.Text)));
            threadUDPlisting.Start();
            //随主窗体关闭
            threadUDPlisting.IsBackground = true;
            //UDPListener(IPAddress.Any, 80);
        }
                private  void UDPListener(IPAddress address, int port)
        {
            UdpClient listener = new UdpClient(port);
            IPEndPoint groupEP = new IPEndPoint(address, port);
            
            try
            {
                while (true)
                {
                    Console.WriteLine("Waiting for broadcast");
                    byte[] bytes = listener.Receive(ref groupEP);

                    Console.WriteLine($"Received broadcast from {groupEP} :");
                    Console.WriteLine($" {Encoding.ASCII.GetString(bytes, 0, bytes.Length)}");
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                listener.Close();
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值