我必须在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中。
上面的代码是pseudocode-ish。如果有任何ambigous请让我知道。
感谢它的工作。 – dburner 2012-04-10 19:42:48