代码之家  ›  专栏  ›  技术社区  ›  Josh Weatherly

VB.NET队列构造函数错误:队列增长因子必须介于1和10之间

  •  0
  • Josh Weatherly  · 技术社区  · 16 年前

    首先介绍一下背景: VB.NET 2005访问MS-SQL后端的应用程序,使用多个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)
    

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

    我有点不知道从哪里着手解决这个问题,所以任何意见都将不胜感激。

    编辑:好的,我终于与他们的IT部门取得了联系,他正在竞选。正如我所怀疑的那样,.NET 2.0。我让IT人员修理了。NET安装后,问题不再存在。所以它实际上是一个。净发行

    3 回复  |  直到 16 年前
        1
  •  2
  •   Ricardo Villamil    16 年前

    这个用户可能没有合适的.net框架吗?我猜你的应用程序需要2.0,但也许他/她需要3.5?他运行的windows版本与其他用户不同吗?

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

        2
  •  2
  •   Wil S    14 年前

    我也遇到了类似的问题——我发现这个问题是为了寻找答案而发布的。就我而言,我一直工作得很好,然后从源代码控制中更新到最新版本,在构建后,我突然在程序启动时看到了这个问题。哇。..??系统怎么可能。收藏。排队。.cotor()突然调用System。收藏。排队。.ctor(Int32,Single),其中第二个参数不在1到10之间?

    System.ArgumentOutOfRangeException was unhandled
      Message="Queue grow factor must be between 1 and 10.\r\nParameter name: growFactor"
      Source="mscorlib"
      ParamName="growFactor"
      StackTrace:
           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.Control.BeginInvoke(Delegate method)
           ... my code below here ...
    
    

    Reflector清楚地显示了此代码:

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

    事实证明,在执行此代码之前,我是通过与本机代码不匹配的P/Invoke签名(在SCM中已更改)对本机代码进行P/Invokes的。(我的构建过程没有将更新的本机DLL正确地复制到正确的位置。)因此,不知何故,堆栈在那一点上被损坏了,导致了这种无法解释的不良情况。

        3
  •  0
  •   Josh Weatherly    16 年前

    这是我等待他们IT员工回复的事情之一。我们的应用程序至少需要。NET 2.0,但我个人还没有用3.5做过任何测试,今天晚些时候我可能有机会研究一下。。

    推荐文章