我已经搜索过答案,但找不到类似的东西......
我对 C# 相当陌生。我需要使用 WinForms 在 C# 中创建一个程序。它基本上有 2 个组件:UI,然后我需要一个永久侦听套接字 TCP 端口的进程。如果收到任何内容,那么我需要引发一个事件或类似的事件,以便我可以更新 UI。
问题:实现程序运行时需要一直监听的进程的最佳方式是什么?
然后,当我收到消息时,如何通知 UI 它需要更新?
Thanks!
您可以使用TcpListener
等待另一个线程上的传入连接。每次收到新连接时,创建一个新线程来处理它。使用Control.Invoke
从非 UI 线程更新 UI。这是一个简短的例子:
public MainForm()
{
InitializeComponents();
StartListener();
}
private TcpListener _listener;
private Thread _listenerThread;
private void StartListener()
{
_listenerThread = new Thread(RunListener);
_listenerThread.Start();
}
private void RunListener()
{
_listener = new TcpListener(IPAddress.Any, 8080);
_listener.Start();
while(true)
{
TcpClient client = _listener.AcceptTcpClient();
this.Invoke(
new Action(
() =>
{
textBoxLog.Text += string.Format("\nNew connection from {0}", client.Client.RemoteEndPoint);
}
));;
ThreadPool.QueueUserWorkItem(ProcessClient, client);
}
}
private void ProcessClient(object state)
{
TcpClient client = state as TcpClient;
// Do something with client
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)