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()    

インターネットでこのエラーを探しましたが、マルチスレッド、並列プログラミング、およびロック メカニズムに関連するものはすべて見つかりました。しかし、私のタスクはそれを使用せず、並列プログラミングやロックメカニズムを使用せず、データベースからデータを取得して電子メールを送信する単純なタスクであり、サーバーが変更される前は完全に実行されていました。

何か案は ????ありがとう。

4

2 に答える 2

0

スタックトレースによるとArrayList.ToArray、例外がスローされています。何かが本当にひどく間違っています。アプリはマルチスレッド化されていますか? サードパーティの DLL は複数のスレッドをサポートしていますか? もしそうなら、おそらく誰かがその特定の を適切に同期するのを忘れていましたArrayList。そうでない場合は、おそらく DLL への呼び出しを同期する必要があります。

たとえば、このQ&Aを参照してください。

編集: 最後の数枚のスタック フレームを見逃しました。ここではマルチスレッドが実際に機能しています。

于 2012-05-31T14:08:49.360 に答える
0

あなたが正しく言うように、オンラインの記事のほとんどはマルチスレッドの問題に言及しています。

あなたの例外が言うという事実

at System.Threading.ThreadHelper.ThreadStart()

これが事実であることを示唆しています。「System.Threading」のインスタンス/参照をコードで検索する価値があるかもしれません。または、自分のコードではないことが確実な場合は、DLL ソース コードまたは少なくともデバッグ ビルドを要求して、デバッガーをアタッチします。

于 2012-05-31T14:13:21.740 に答える