首页 > 解决方案 > StackOverflowException - 没有递归

问题描述

我发布这个问题是因为现有论坛对StackOverflowException的引用虽然信息丰富,但与我遇到的当前场景并不完全相关。

我一直在为我的雇主开发一个应用程序,我最近为该应用程序创建了一个 MSI 并安装在公司的 Citrix 服务器场上。当我通过 Citrix Workspace 启动应用程序时,它成功启动。但是,当我单击特定按钮来实例化应用程序的一个 Windows 窗体时,发生了StackOverflowException。这是一个惊喜,因为StackOverFlowException没有被抛出到我的开发机器上,而且从来没有。我已经开发这个应用程序一年多了。

公司的 Citrix 服务器场中有三 (3) 台服务器。StackOverFlowException发生在其中两 (2) 个上,但不是第三个。我已经通过登录每个服务器并直接运行已编译的应用程序来验证这一点。

由于在 Citrix 服务器上调试错误不是一个选项,我在应用程序代码中添加了对话框窗口并创建了一个修改后的可执行文件,然后我在相关的 Citrix 服务器上使用它。

使用这种方法,我能够查明引发异常的语句。它在窗体的New构造函数被调用时抛出:

新构造函数 - 箭头

所以,我查看了构造函数的代码。在代码中放置更多对话框并重新运行应用程序,我能够确定在调用InitializeComponent期间发生了异常:

新构造函数 - InitializeComponent 调用

有问题的 Windows 窗体是一个非常大的窗体,其中包含多个控件,包括几个 TabControl、TreeView 和多个 SplitContainer(其中一些是嵌套的)。

毫不奇怪,InitializeComponent 是一个非常大的例程;太大,无法在此线程中发布;否则我会这样做。

我在New构造函数或InitializeComponent中看不到任何递归。此外,这里令人困惑的是为什么SystemStackOverFlowException发生在三台服务器中的两台上,而第三台却没有。

如果有人有任何想法,我想听听他们的意见。当然,任何建议和/或见解将不胜感激。

我的开发机器在 Windows 10 上使用 VS2017 (.Net Framework 4.8.1)。

我们服务器场中的三 (3) 台 Citrix 服务器都在 Windows 2008 Server R2 上。他们都安装了 .NET Frameworks 4.8.1。

标签: vb.netstack-overflownew-operatorinitializecomponent

解决方案


推荐阅读