0

首先是一些背景:访问 MS-SQL 后端的 VB.NET 2005 应用程序,使用多个 Web 服务进行数据收集/发布。

关于错误:我们的应用程序在我们的一台客户计算机上神秘地崩溃了,它在他们办公室的其他计算机上运行良好,但在大辉格党的计算机上却不行,这现在成了我的问题。这似乎是某种软件冲突,因为他们已经更换了计算机(我假设的软件配置相同),但错误仍然存​​在。我目前正在等待他们的 IT 人员的回复,说明该用户的设置与该办公室的其他用户之间是否存在任何已知差异。

更烦人的是应用程序就消失了。我们无法轻松调试它,因为没有显示错误消息,即使我们有特定的代码来捕获未处理的异常并显示消息,它也会关闭。

但是,我们的异常处理代码调用(至少部分),因为它成功记录了以下错误(只是不像其他正常错误那样向用户显示):

Error Message: Queue grow factor must be between 1 and 10. 


Stack Trace: at 
System.Collections.Queue..ctor(Int32 capacity, Single growFactor) at 
System.Collections.Queue..ctor() at 
System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at 
System.Windows.Forms.Control.BeginInvoke(Delegate method, Object[] args) at 
System.Windows.Forms.Form.OnLoad(EventArgs e) at 
System.Windows.Forms.Form.OnCreateControl() at 
System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at 
System.Windows.Forms.Control.CreateControl() at 
System.Windows.Forms.Control.WmShowWindow(Message& m) at 
System.Windows.Forms.Control.WndProc(Message& m) at 
System.Windows.Forms.ScrollableControl.WndProc(Message& m) at 
System.Windows.Forms.ContainerControl.WndProc(Message& m) at 
System.Windows.Forms.Form.WmShowWindow(Message& m) at 
System.Windows.Forms.Form.WndProc(Message& m) at 
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at 
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at 
System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

现在真正奇怪的是,我们在此时应该运行的代码中根本没有使用队列。(用户打开应用程序,尝试登录,bam,错误发生)代码中任何地方引用的唯一队列是在一个非常特定的函数中,该函数只在内部测试模式下运行。它在那里没有任何问题。

我不知道在哪里处理这个问题,所以任何输入都将不胜感激。

编辑:好的,我终于与他们的 IT 部门取得了联系,正如我所怀疑的那样,他正在运行 .NET 2.0。我让 IT 人员从“添加/删除程序”修复了 .NET 安装,之后问题不再存在。所以这实际上是一个 .NET 问题

4

3 回答 3

2

该用户是否可能没有适当的 .net 框架?我猜你的应用程序需要 2.0,但也许他/她有 3.5?他运行的 Windows 版本是否与其他用户不同?

问题不在于您的代码,而是较低级别的 .net BCL。

于 2009-01-21T19:39:24.353 回答
2

我有一个类似的问题 - 我发现这个问题张贴在寻找答案。就我而言,我一直工作得很好,然后从我的源代码控制中更新到最新版本,并且在构建之后突然我在程序启动时看到了这个问题。哇……??System.Collections.Queue..ctor() 怎么会突然调用 System.Collections.Queue..ctor(Int32, Single) 而第二个参数不在 1 到 10 之间?

System.ArgumentOutOfRangeException 未处理
  Message="队列增长因子必须介于 1 和 10 之间。\r\n参数名称:growFactor"
  来源="mscorlib"
  参数名称="增长因子"
  堆栈跟踪:
       在 System.Collections.Queue..ctor(Int32 容量,单增长因子)
       在 System.Collections.Queue..ctor()
       在 System.Windows.Forms.Control.MarshaledInvoke(控制调用者,委托方法,对象 [] 参数,布尔同步)
       在 System.Windows.Forms.Control.BeginInvoke(委托方法,对象 [] 参数)
       在 System.Windows.Forms.Control.BeginInvoke(委托方法)
       ...我的代码在下面...

Reflector 清楚地显示了这段代码:

public Queue() : this(0x20, 2f) { }

事实证明,在执行此代码之前,我正在通过与本机代码(在 SCM 中已更改)不匹配的 P/Invoke 签名对本机代码进行 P/Invoking。(我的构建过程没有正确地将更新的本机 DLL 复制到正确的位置。)所以不知何故,堆栈在那个时候被破坏了,导致了这种无法解释的错误。

于 2011-03-15T21:25:01.960 回答
0

这是我正在等待从他们的 IT 员工那里听到的一件事。我们的应用程序至少需要 .NET 2.0,但我个人还没有对 3.5 进行过任何测试,今天晚些时候我可能有机会研究它..

于 2009-01-22T15:39:10.347 回答