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
1
二维码
打赏
海报
CSharp 多线程通信
方法:使用C#提供的Action<>和Fun<>泛型委托来处理
需求:开启两个子线程,一个线程负责UDP接收网络数据,另一个线程负责数据的UI界面显示
需求……
文章目录
关闭
共有 0 条评论