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();
            }
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章