C# (Visual Studio 2013) で Windows サービスを作成しています。サービスは、接続先のサーバーごとにスレッドをアクティブ化します。
「サーバー」オブジェクトは「ThreadStatic」として定義されています (したがって、各スレッドは別のオブジェクトとしてそれにアクセスする必要があります)。
[ThreadStatic]
public static Server CurServer
デバッグ時-時々エラーが発生します:
ArgumentOutOfRangeException
Index was out of range. Must be non-negative and less than the size of the collection.
次の行で発生します (「サーバー」スレッドのメソッド内)。
EventConn.FindString = G.CurServer.FilesList[G.CurServer.nFilesIndex].SearchString;
しかし、奇妙なことに、デバッガーは値が問題ないことを示しています。
G.CurServer.FilesList.count = 1
G.CurServer.nFilesIndex = 0
したがって、エラーは発生しません!!!
F11 (デバッガー ステップ) を押すと、すべてが正常であるかのようにデバッグが続行され、割り当ても機能します...
どうして?????:0
現在のスレッドの値を割り当てる前にエラーが表示されるのは、Visual Studio のバグですか? それとも、私はスレッドセーフリーを使用していないのでしょうか (より可能性が高い)?