“System.Windows.Forms.dll中发生了'System.StackOverflowException'类型的未处理异常”

时间:2013-12-22 19:21:36

标签: c# winforms stack-overflow

DateTime tThen = DateTime.Now;
do
{
    Application.DoEvents();
} while (!cefGlueBrowserForm.Done || tThen.AddSeconds(15) > DateTime.Now);

string htmlSource = cefGlueBrowserForm.DocumentDomHtml;
propertyBag.GetResponse = () => new MemoryStream(Encoding.UTF8.GetBytes(htmlSource));
cefGlueBrowserForm.Dispose();

几个小时后我排队

while (!cefGlueBrowserForm.Done || tThen.AddSeconds(15) > DateTime.Now);

的例外情况
  

System.Windows.Forms.dll中出现未处理的“System.StackOverflowException”类型异常

以下是错误说明: http://msdn.microsoft.com/en-us/library/w6sxk224%28v=vs.90%29.aspx

确保没有无限循环或无限递归。

  

太多的方法调用通常表示非常深或无限的递归。

所以我该怎么办?我需要等到cefGlueBrowserForm中的一些代码完成或达到时间。但为什么然后错误,我有时间检查...

2 个答案:

答案 0 :(得分:1)

来自MSDN docs

  

条件OR运算符(||)执行其bool操作数的逻辑或。如果第一个操作数的计算结果为true,则不计算第二个操作数。

如果第一个条件为真,则不会检查||中的第二个条件。

该程序说明了概念

class Program
{

    static void Main(string[] args)
    {
        Console.WriteLine( p() || q() ); //prints Return True from p , True
        Console.WriteLine( q() || p() ); //prints Return False from q, Return true from p, True
    }

    static bool p()
    {
        Console.WriteLine("Return True");
        return true;
    }

    static bool q()
    {

        Console.WriteLine("Return False");
        return false;
    }
}

答案 1 :(得分:1)

Application.DoEvents是邪恶的,不要使用它。它可能会导致无法解释的效果 - 比如StackOverflow。应该避免在UI线程中忙碌等待。要修复它,请使用例如BackgroundWorker