C# 多个实例,存在变量重叠的问题#

C# 多个实例,存在变量重叠的问题#,c#,C#,我正在使用下面的代码示例- Program.cs的客户端列表如下: public static List<Client> clients = new List<Client>(); Client.cs 所有变量都是非静态的和公共的。有一个eventhandler,在接收数据包时调用一个类,然后对该类进行过滤和处理 它在以下代码中被调用: public void recieved(short op, string str, Client c) { switch (

我正在使用下面的代码示例-

Program.cs的客户端列表如下:

public static List<Client> clients = new List<Client>();
Client.cs

所有变量都是非静态的和公共的。有一个eventhandler,在接收数据包时调用一个类,然后对该类进行过滤和处理

它在以下代码中被调用:

public void recieved(short op, string str, Client c)
{
    switch (op)
    {
        case (short)OpCodes.matches:
        {
            c.something(c, str);
            break;
        }
    }
}
Handler.cs

public void something(Client c, string movement)
{
    if (movement == null)
        c.coords = movement;
    c.freeSpot = true;
}
在上面^中,变量将重叠,freespot将在所有实例中变为真

它只适用于一个实例。但我正在尝试使用多个实例进行编译。 因此,创建一个
按钮\u onclick
将使用上述方法创建一个新实例


当程序运行时,它在一个实例上完美地运行,但在2个以上的实例中,
MyClass
中的变量开始重叠。有没有办法防止这种情况发生?

如果没有更多的上下文,我不能肯定,但这可能是一个并发问题。列表不是线程安全的。尝试使用
ConcurrentBag
而不是
List

如果您使用的是visual studio,请尝试使用其出色的调试器,并通过提供一个唯一生成的ID来跟踪客户端的所有不同实例,例如,调用
received(…)
?调用received(…)的代码看起来是什么样子是一个eventhandler@user2309449请不要问同一个问题超过一次
public void something(Client c, string movement)
{
    if (movement == null)
        c.coords = movement;
    c.freeSpot = true;
}