c# - Threading gives wrong argument -


i have server set listen on port clients, if find 1 add them client array , listen them thread there.

console.write("max players: "); maxplayers = int32.parse(console.readline()); clients = new tcpclient[maxplayers]; playercount = 0;  formatter = new binaryformatter(); server = new tcplistener(ipaddress.parse("192.168.1.33"), 7777); server.start();  while (true) {     if (server.pending() && playercount < maxplayers)     {         console.writeline("found client");         clients[playercount] = server.accepttcpclient(); // client connection         //when 1 player joins, should start thread playercount of 0         thread t = new thread(() => listenclient(playercount));         t.start();         playercount++;     } }  public static void listenclient(int index) {     while (true)     {         networkstream stream = clients[index].getstream();         object obj = formatter.deserialize(stream);          if (obj != null)         {             console.writeline(obj);         }     } } 

however, when 1 player joins, thread called , passed argument of 1, not 0 reason. issue here?

well, that's how lambda works. try instead:

while (true) {     if (server.pending() && playercount < maxplayers)     {         console.writeline("found client");         clients[playercount] = server.accepttcpclient(); // client connection         //when 1 player joins, should start thread playercount of 0         int currentplayerscount = playercount;         thread t = new thread(() => listenclient(currentplayerscount));         t.start();         playercount++;     } } 

edit:

as accepted answer, should mentioned davidg , andrey's posts below give additional important information closures, , should read full picture.


Comments