CSharp 多线程通信

方法:使用C#提供的Action<>和Fun<>泛型委托来处理

需求:开启两个子线程,一个线程负责UDP接收网络数据,另一个线程负责数据的UI界面显示

需求涉及3个线程:

  • UI主线程
  • 界面更新线程
  • UDP接收线程
namespace 线程通知演示
{
    public partial class Form1 : Form
    {
        private UdpClient mUdpRecvClient;

        public Form1()
        {
            InitializeComponent();

            TextBox.CheckForIllegalCrossThreadCalls = false;

            //UI显示线程
            Thread showThread = new Thread(show);
            showThread.Start();
        }

        private void show()
        {
            //泛型委托
            Action<string> callback = update;

            //UDP接收线程
            Thread receiveThread = new Thread(udpReceiver);
            receiveThread.IsBackground = true;
            receiveThread.Start(callback);
        }

        private void udpReceiver(Object obj)
        {
            //获取本地的IP地址
            string localIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    localIP = _IPAddress.ToString();
                    break;
                }
            }

            Console.WriteLine(localIP);

            IPEndPoint localIpep = new IPEndPoint(IPAddress.Parse(localIP), 25000); //本机IP和监听端口号

            IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0);

            mUdpRecvClient = new UdpClient(localIpep);

            while (true)
            {
                try
                {
                    byte[] data = mUdpRecvClient.Receive(ref remoteIpep);
                    string message = Encoding.Default.GetString(data, 0, data.Length);
                    Console.WriteLine(message);

                    Action<string> callback = obj as Action<string>;
                    callback(message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    break;
                }
            }
        }

        private void update(string message)
        {
            textBox.Text = message;
        }
    }
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/csharp-multithreaded-communication/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
CSharp 多线程通信
方法:使用C#提供的Action<>和Fun<>泛型委托来处理 需求:开启两个子线程,一个线程负责UDP接收网络数据,另一个线程负责数据的UI界面显示 需求……
<<上一篇
下一篇>>
文章目录
关闭
目 录