1

我正在用 C# (Visual Studio 2013) 编写 Windows 服务。该服务为其连接的每个服务器激活一个线程。

'server' 对象被定义为 '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 中的错误提示错误?或者我没有使用线程 saftley(更有可能)?

4

1 回答 1

0

我无法解释VS的显示不好,但是我找到了错误的原因:

我在线程的方法中使用了对象赋值,如下所示:

G.CurServer = server;

而不是像这样克隆对象(如何克隆对象):

G.CurServer = (Server).Clone();

第一个分配导致 G.CurServer 的值在不同线程中发生变化,即使它是 [ThreadStatic]。

我希望它对某人有所帮助......祝你好运,Eyal。http://reginiano.com

于 2014-04-27T14:17:29.890 回答