smartirc4net 永远监听,无法退出线程

Posted

技术标签:

【中文标题】smartirc4net 永远监听,无法退出线程【英文标题】:smartirc4net listens forever, can't exit thread 【发布时间】: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 循环,然后成功断开连接。 我不正确地接近这个吗?有没有更简洁的方法让机器人立即断开连接?

【问题讨论】:

【参考方案1】:

发现这是最新代码中的一个错误,已通过https://github.com/meebey/SmartIrc4net/issues/4meebey 确认

【讨论】:

以上是关于smartirc4net 永远监听,无法退出线程的主要内容,如果未能解决你的问题,请参考以下文章

观察者模式实际应用:监听线程,意外退出线程后自动重启

读者线程没有退出 - Posix Pthreads

阻塞监听防止断开连接

使用vue开发webApp,安卓手机自带回退键的问题解决

winform闪退无错误日志

SmartIrc4net 一段时间后断开连接