我在寫一個C#程序,它一次運行兩個IRC連接。 的連接線程,每個線程開始像這樣:C#使線程等待定時器
MainThread = new Thread(new ThreadStart(StartMainProcessor));
MainThread.IsBackground = false;
MainThread.Start();
private void StartMainProcessor() {
MainProcessor.Bot.Connect();
//while (true) { }
}
Bot.Connect()看起來像這樣(有點刪節版):
public void Connect() {
try {
Client.Connect(IRCHelper.SERVER, IRCHelper.PORT);
}
catch (CouldNotConnectException e) {
Reconnect(true);
return;
}
try {
Client.Listen();
}
catch (Exception e) {
Reconnect(false);
return;
}
}
這工作得很好,直到機器人斷開連接(這總是會最終發生,這是IRC的本質)。 當它斷開連接時,將調用Reconnect(),啓動一個計時器。當該計時器到期時,殭屍意味着再次調用Connect()。計時器的原因是IRC服務器有時會拒絕立即重新連接。
但是,一旦Connect()方法結束,線程結束,程序(控制檯應用程序)退出。 (Client.Listen()被阻塞)
我以前通過在StartMainProcessor()中添加while(true){}來克服了這個問題...但是這樣吃了100%的CPU,我真的更喜歡不同的解。
謝謝你的幫助。 :)
是否必須重新連接是由與previosu連接相同的線程進行的? – 2012-02-07 10:52:43