VB.NET Ошибка конструктора очереди: Коэффициент роста очереди должен быть от 1 до 10 - PullRequest
0 голосов
/ 21 января 2009

Сначала немного предыстории: VB.NET 2005 Приложение, которое обращается к серверной части MS-SQL и использует несколько веб-служб для сбора / публикации данных.

По ошибке: Наше приложение таинственно вылетает на одном из наших клиентских компьютеров, оно отлично работает на других компьютерах в их офисе, но не на компьютере большого вигса, что теперь делает его моей проблемой. Похоже, это какой-то программный конфликт, поскольку они заменили компьютер (с той же конфигурацией программного обеспечения, которую я предполагаю), но ошибка все еще сохраняется. В настоящее время я жду ответа от их ИТ-персонала о том, есть ли какие-либо известные различия между настройкой этого пользователя и другими в этом офисе.

Что еще более раздражает, приложение просто исчезает. Мы не можем легко отладить его, так как сообщения об ошибках не отображаются, хотя у нас есть специальный код, чтобы перехватывать необработанные исключения и отображать сообщение, оно просто закрывается.

Однако наш код обработки исключений - это , вызываемый (хотя бы частично), поскольку он успешно регистрирует следующую ошибку (просто не показывает ее пользователю, как другие обычные ошибки):

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, происходит ошибка). Единственные очереди, на которые есть ссылки в коде, - это очень специфическая функция, которая когда-либо запускается только в собственном режиме тестирования. И там нет никаких проблем.

Я в некотором затруднении относительно того, что делать с этой проблемой, поэтому мы будем благодарны за любой вклад.

Редактировать: Хорошо, я наконец-то связался с их ИТ-отделом, он работал под управлением .NET 2.0, как я и подозревал. У меня был ИТ-специалист, который восстанавливал установку .NET из «Установка и удаление программ», и после этого проблема больше не существовала. Так что на самом деле это была проблема .NET

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

У меня была похожая проблема - я нашел этот вопрос опубликованным в поисках ответов. В моем случае я работал нормально, затем обновлялся до последней версии из моего исходного кода, и после сборки я внезапно вижу эту проблему во время запуска программы. Whaaa ... ?? Как мог System.Collections.Queue..ctor () внезапно вызывать System.Collections.Queue..ctor (Int32, Single), где 2-й аргумент не был между 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 ...

Отражатель четко показывает этот код:

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

Оказывается, что до выполнения этого кода я выполнял P / Invoking для собственного кода через сигнатуру P / Invoke, которая не совпадала с собственным кодом (который изменился в SCM). (Мой процесс сборки неправильно копировал обновленную собственную DLL в правильное место.) Так что в какой-то момент стек был поврежден, что привело к необъяснимым ошибкам.

2 голосов
/ 21 января 2009

Возможно ли, что у этого пользователя нет подходящей платформы .net? Я предполагаю, что ваше приложение требует 2.0, но, возможно, у него / нее есть 3.5? Он использует другую версию Windows, чем другие пользователи?

Проблема не с вашим кодом, а с более низким уровнем .net BCL.

0 голосов
/ 22 января 2009

Это одна из вещей, которую я жду, чтобы услышать от их ИТ-персонала. Наше приложение требует, по крайней мере, .NET 2.0, но я лично не проводил никаких испытаний с 3.5, возможно, у меня будет возможность посмотреть его позже сегодня.

...