0

我有这个每天在服务器上运行的计划任务,该任务完美运行了 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()    

我在 Internet 上查找了这个错误,但我发现的所有内容都与多线程、并行编程和锁定机制有关。但是我的任务不使用任何这些,它不使用并行编程或锁定机制,它是一项从数据库中检索数据并发送电子邮件的简单任务,并且在服务器更改之前它已经完美运行。

有任何想法吗 ????谢谢。

4

2 回答 2

0

正如您正确地说的那样,大多数在线文章都提到了多线程问题。

你的例外说的事实

at System.Threading.ThreadHelper.ThreadStart()

表明事实确实如此。可能值得在您的代码中搜索“System.Threading”的任何实例/引用。或者,如果您确定不是您的代码要求 DLL 源代码或至少是调试版本,以便您附加调试器。

于 2012-05-31T14:13:21.740 回答
0

根据堆栈跟踪ArrayList.ToArray正在抛出异常。确实有些大错特错。您的应用程序是多线程的吗?第三方DLL是否支持多线程?如果是这样,有人可能忘记正确同步该特定ArrayList的 . 如果没有,您可能必须同步对 DLL 的调用。

例如,请参阅此问答

编辑:我错过了最后几个堆栈帧。多线程确实在这里发挥作用。

于 2012-05-31T14:08:49.360 回答