我正在编写一个用于在 C# 中调节我的 twitch.tv 频道的机器人。
这是循环的基本代码,由后台工作人员完成,以避免 UI 冻结。有 TCPClient (Client)、StreamReader (Reader)、StreamWriter (Writer) 和 NetworkStream (Stream)。
private void listener_dowork(object sender, DoWorkEventArgs e)
{
string Data = "";
while ((Data = Reader.ReadLine()) != null)
{
//Perform operations on the received data
}
Console.WriteLine("Loop ended");//this shouldn't happen
}
private void listener_workercompleted(object sender, RunWorkerCompletedEventArgs e)
{
//basically, display a console message that says "OOPS!" and try to reconnect.
}
我收到消息“循环结束”和“糟糕!” 在那一点上,我得到了异常(我一生都无法捕捉到)。
问题是,我可以在物理上从计算机上拔下网络电缆,等待 30 秒然后重新插入,它会继续正常运行。
完整的例外是:
System.Net.Sockets.SocketException (0x80004005): An established connection was aborted by the software in your host machine
at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
请注意缺少行号,它出现在我遇到的所有其他类型的异常中,这意味着我不知道程序的哪个部分导致了异常,即使我已经将所有可能的行都放在了 try 中/抓住。
我想我正在寻找的是对为什么会发生这种情况的一些见解。
每次我启动机器人并让它在任何频道上运行几分钟时都会发生这种情况,尽管分钟数会有所不同。