【发布时间】:2012-02-07 10:16:01
【问题描述】:
我正在编写一个同时运行两个 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;
}
}
在 bot 断开连接之前,这一切正常(最终总会发生,这是 IRC 的本质)。 当它断开连接时,会调用 Reconnect(),它会启动一个计时器。当该计时器到期时,机器人将再次调用 Connect()。计时器的原因是 IRC 服务器有时会拒绝立即重新连接。
然而,一旦 Connect() 方法结束,线程结束,程序(控制台应用程序)退出。 (Client.Listen() 正在阻塞)
我之前通过在 StartMainProcessor() 中添加 while (true) { } 来克服这个问题...但这会占用 100% 的 CPU,我真的更喜欢不同的解决方案。
感谢您的帮助。 :)
【问题讨论】:
-
重新连接是否必须从与之前的连接相同的线程进行?
标签: c# .net multithreading timer