【发布时间】:2013-04-17 15:31:18
【问题描述】:
我有一个使用 smartirc4net 库的 IRC 机器人。我遇到了机器人正在侦听命令的问题,我希望它正在运行的线程退出。 Listen() 命令永远阻塞。如果我使用ListenOnce(),我可以将调用放在While(!ShouldExit) 循环中,但我必须等待机器人触发ListenOnce()。
protected void irc_OnConnected(object sender, EventArgs e)
{
irc.Login(configuration.IRCNick, configuration.IRCNick);
while (!_shouldDisconnect)
{
irc.ListenOnce();
}
irc.Disconnect();
}
作为一种解决方法,当机器人从父线程发出断开连接命令时,它会向自己发送一条消息:
/// <summary>
/// Used by the parent thread to disconnect the bot
/// </summary>
/// <returns></returns>
public void Disconnect()
{
_shouldDisconnect = true;
irc.SendMessage(SendType.Message, irc.Nickname, "EXIT YOU STUPID BOT");
}
这会触发ListenOnce() 事件循环回while 循环,然后成功断开连接。
我不正确地接近这个吗?有没有更简洁的方法让机器人立即断开连接?
【问题讨论】:
标签: c# .net multithreading irc