我在写一个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