2013-04-29 27 views
0

我使用下面的代碼示例 -多個實例,故障與重疊的變量C#

Program.cs中有客戶的名單:

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

與點擊的事件處理程序的按鈕1

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中的變量開始重疊。有沒有辦法來防止這種情況?

+2

如果您使用的是Visual Studio,請嘗試使用其美妙的調試程序,並通過給它們(例如,唯一生成的ID)跟蹤客戶端的所有不同實例。 – Patashu 2013-04-29 05:11:58

+0

代碼看起來像調用'received(...) '? – 2013-04-29 05:19:37

+0

調用接收的代碼(...)是事件處理程序 – user2309449 2013-04-29 05:24:23

回答

0

我不能說沒有更多的上下文,但這可能是一個併發問題。列表不是線程安全的。嘗試使用ConcurrentBag<T>而不是List<T>