한 번에 두 개의 IRC 연결을 실행하는 C# 프로그램을 작성하고 있습니다. 연결은 나사, 그리고 각 스레드과 같이 시작합니다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() 메서드가 끝나면 스레드가 끝나고 프로그램 (콘솔 응용 프로그램)이 종료됩니다.
이전에 StartMainProcessor()에서 while (true) {}을 추가하여이 문제를 극복했습니다. 그러나이 작업은 100 % CPU를 소비하며 실제로 다른 점을 선호합니다. 해결책.
도움 주셔서 감사합니다. :)
previosu 연결과 동일한 스레드에서 다시 연결해야합니까? –