多个实例,重叠变量C#的麻烦

时间:2013-04-29 05:08:29

标签: c#

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

Program.cs有一个客户列表:

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

使用事件处理程序单击button1

 private void button1_Click(object sender, EventArgs e)
 {
     Client client = new Client(combobox1.selecteditem);
     Program.clients.Add(client);
 }

Client.cs

所有变量都是非静态和公共的。有一个事件处理程序,在数据包接收,一个类被调用,然后过滤和处理该类

在以下代码中调用它:

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会在所有实例中都成立。

一个实例可以正常工作。但我正在尝试使用多个实例进行编译。 因此,创建button_onclick将使用上面的内容创建一个新实例。

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

1 个答案:

答案 0 :(得分:0)

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