我必須在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