我有这个计划的任务,每天在服务器上运行,任务完美地工作了1年。服务器更改(将任务移动到新服务器)后,任务开始崩溃,执行此操作:
Unhandled Exception: System.ArgumentException: Destination array was not long enough.
Check destIndex and length, and the array's lower bounds.
at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray,
Int32 destinationIndex, Int32 length, Boolean reliable)
at System.Collections.ArrayList.ToArray()
at Directory.MessageVector.findMessageById(Int32 msgId)
at Directory.Connection.ReaderThread.Run()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
我在互联网上查看了这个错误,但我发现所有这些都与多线程,并行编程和锁定机制有关。但是我的任务没有使用任何一个,它不使用并行编程或锁定机制,它是一个简单的任务,从数据库检索数据和发送电子邮件,它在服务器更改之前完美运行。
任何想法???? 感谢的。
答案 0 :(得分:0)
根据堆栈跟踪ArrayList.ToArray
抛出异常。确实有些可怕的错误。你的应用程序是多线程的吗?第三方DLL是否支持多个线程?如果是这样,有人可能忘记正确同步特定的ArrayList
。如果没有,您可能必须同步调用DLL。
例如,请参阅此Q&A。
编辑:我错过了看最后几个堆栈帧。多线程确实在这里发挥作用。
答案 1 :(得分:0)
正如你正确地说,网上的大部分文章都提到了多线程问题。
您的例外说明
at System.Threading.ThreadHelper.ThreadStart()
表明事实确实如此。 可能值得在代码中搜索/参考" System.Threading"的任何实例。 或者,如果您确定不是您的代码请求DLL源代码或至少是调试版本,以便您附加调试器。