我必须在 C# 中创建一个 Instant Messenger 服务器。服务器是一个 ConsoleApplication 项目。我想制作一个在 3 个线程中运行的服务器。我将在下面的代码中解释。
问题是如何从单独的线程调用函数,或在单独的线程上创建事件?
这是主要的服务器类。
public class GiNetServer
{
public void Start()
{
netServer = new NetServer();
msgHandler = new NetMsgHandler();
netServer.NewNetMsg += msgHandler.HandleMsg;
Work();
}
private void Work()
{
while(true) //This runs in the MainThread
sleep(1);
}
}
NetServer 类创建 2 个线程:acceptClientsThread 和 receiveMessagesThread。接收线程调用 NewNetMsg。
public class NetServer
{
public event NewNetMsgEventHandler NewNetMsg;
public NetServer()
{
acceptClientsThread = new Thread(ListenForClients);
receiveMessageThread = new Thread(Receive);
//and of course starts them here...
}
private void Receive()
{
while(true)
{
Heartbeat();
}
}
private void Heartbeat()
{
foreach(netClient in clientsList)
{
if (netClient.DataAvalible)
{
netClient.Recive();
}
if (!netClient.IsBufferEmpty())
{
nextMsg = netClient.NextMessage();
if (nextMsg != null)
NewNetMsg(netClient, nextMsg); //Call the event!
}
}
}
}
如何使 msgHandler.HandleMsg 函数在单独的线程或 MainThread 中运行?
像这样,HandleMsg 在 receiveMessagesThread 中运行。
上面的代码是伪代码。如果有什么模棱两可的地方请告诉我。