未处理的异常:System.ArgumentException:目标数组不够长

本文关键字:数组 不够 目标 System 异常 未处理 ArgumentException | 更新日期: 2023-09-27 18:36:05

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

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

任何想法????谢谢。

未处理的异常:System.ArgumentException:目标数组不够长

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

您的异常说的事实

at System.Threading.ThreadHelper.ThreadStart()

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

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

例如,请参阅此问答。

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