我正在尝试在服务器应用程序上接收一系列图片帧,并在开始程序工作完美时将它们显示在图片框中但是在5到10分钟之后取决于我发送的帧我得到错误“未处理的类型异常System.Drawing.dll中出现'System.StackOverflowException'“服务器中的代码看起来像那样
public void ImgRecive()
{
try
{
tcp.Start();
sock = tcp.AcceptSocket();
ns = new NetworkStream(sock);
pictureBox1.Image = Image.FromStream(ns);
tcp.Stop();
if (sock.Connected == true)
{
while (true) { ImgRecive(); }
}
ns.Flush();
}
catch (Exception exxx) { MessageBox.Show(exxx.Message); }
}
我试过了 pictureBox1.Image.Dispose(); 我也试图删除图片框并重新创建它但仍然有同样的问题
所以任何想法解决问题的家伙?
答案 0 :(得分:-1)
看到这篇文章: https://msdn.microsoft.com/en-us/library/w6sxk224.aspx
〜剪断
当执行堆栈因嵌套方法调用过多而溢出时,抛出StackOverflowException异常。 相关提示 确保没有无限循环或无限递归。 太多的方法调用通常表示非常深或无限的递归。
此外,检查堆栈上分配的任何对象/数据,并尽可能尝试进行堆分配。
答案 1 :(得分:-1)
我用while循环替换了递归,它对我有用 新代码就像这样
public void ImgRecive()
{
tcp.Start();
sock = tcp.AcceptSocket();
ns = new NetworkStream(sock);
while (sock.Connected == true)
{
try
{
tcp.Start();
sock = tcp.AcceptSocket();
ns = new NetworkStream(sock);
pictureBox1.Image = Image.FromStream(ns);
tcp.Stop();
ns.Flush();
}
catch (Exception exxx) { MessageBox.Show(exxx.Message); }
}
}
谢谢你们所有人