C# 多个实例,存在变量重叠的问题#
我正在使用下面的代码示例- Program.cs的客户端列表如下: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 (
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;
}