在 Silverlight 中,无限递归可能会挂起整个浏览器。
public void SomeMethod()
{
RecursingMethod1();
}
public void RecursingMethod1()
{
...
RecursingMethod2();
...
}
public void RecursingMethod2()
{
...
RecursingMethod1();
...
}
调用SomeMethod()
会导致无限递归循环。在 .net 框架中,您将获得System.StackOverflowException
. 在 Silverlight 中,它只是挂起浏览器(例如,带有 silverlight 插件的选项卡无法关闭,您无法切换到另一个选项卡,剩下的唯一选项就是杀死浏览器)。谷歌浏览器中的沙盒在这种情况下没有帮助。
典型的情况是从事件处理程序调用事件。
有什么方法可以让 Silverlight throwSystem.StackOverflowException
吗?
编辑 1
对于简单的 resursion 插件/浏览器将崩溃。
如果从事件处理程序调用事件,浏览器会挂起。在这种情况下似乎没有真正的递归,只是吞噬插件/浏览器资源的无限循环。它永远不会抛出异常。