Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;类型为';的未处理异常;System.StackOverflowException';在System.Windows.Forms.dll中发生;_C#_Winforms_Stack Overflow - Fatal编程技术网

C# &引用;类型为';的未处理异常;System.StackOverflowException';在System.Windows.Forms.dll中发生;

C# &引用;类型为';的未处理异常;System.StackOverflowException';在System.Windows.Forms.dll中发生;,c#,winforms,stack-overflow,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

几个小时后我就开始排队了

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();
例外

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

以下是错误描述:

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

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


那我该怎么办?我需要等到cefGlueBrowserForm中的一些代码完成或到达时间。但为什么会出错,我有时间检查…

来自

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

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

这个节目说明了这个概念

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

Application.DoEvents
是邪恶的,不要使用它。它可能会造成无法解释的影响,如堆栈溢出。应避免在UI线程中进行繁忙等待。要修复它,例如,
BackgroundWorker

不会检查您在| |中的状态。如果第一个条件为真。请不要删除只是为了重新发布。看看调用堆栈@穆罕默德,你说得对这是错误的。我还需要比较器来比较日期,而不是simle>我是对的
|
是错的。听起来很有趣。不相关,因为问题中的第二个条件没有副作用。编辑:事实上,我可能完全误解了你回答的要点。否决票暂时取消,但你能详细说明一下吗?重点是,问题中的条件没有副作用。“但是为什么会出现错误,我有时间检查……”我想如果没有检查时间检查就没有任何好处。啊,现在我明白了你的观点,基本上是“你想要
&
,而不是
|
”。你的回答不清楚,但你是对的。请注意,如果使用第二个操作数求值的
|
而不是
|
,您仍然会遇到同样的问题。您认为这与StackOverlow异常有什么关系?是的,这更清楚了,谢谢。不过,我仍然认为您关注的是错误的方面,因为即使计算了
|
的第二个操作数,代码也不会按预期工作。如果我只需要等待,为什么要使用BackgroundWorker?我不需要仅仅为了等待而对工作流程进行后台处理。还是我?您显然使用了
Application.DoEvents
来防止阻塞GUI线程。正确的方法是将阻塞部分移动到背景线程。如果您可以使用.NETFramework4.5,那么使用async/await可能会更容易。对不起,这个主题太宽了。而且我对你的项目了解不够。只需搜索“c#async wait”即可找到大量信息和示例。Re Doe事件参见示例和
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;
    }
}