C#Server Socket引发system.drawing.dll中发生的'system.stackoverflowexception'类型的未处理异常

时间:2016-03-06 20:19:10

标签: c# tcp server stack-overflow

我正在尝试在服务器应用程序上接收一系列图片帧,并在开始程序工作完美时将它们显示在图片框中但是在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(); 我也试图删除图片框并重新创建它但仍然有同样的问题

所以任何想法解决问题的家伙? enter image description here

2 个答案:

答案 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); }
        }
    }
谢谢你们所有人