AcceptTcpClient Блокиране на останалата част от кода

Здравейте, имам този код тук

if (Main && List && Admin)
{
Console.WriteLine("[SERVER]" + "Waiting to connect");
TcpClient ClientList = ListServer.AcceptTcpClient();
if (ClientList.Connected)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine(ListMessage + "CONECTED !");
}
NextCode();
      }
  }

 private void NextCode()
{
//CODE
}

Когато дойдете на линия: TcpClient ClientList = ListServer.AcceptTcpClient();. Програмата чака връзка. Как да спра да чакам във фонов режим и допълнителни редове код за изпълнение?


person user3310916    schedule 26.02.2014    source източник
comment
Мисля, че не е добре да се използват методи като NextCode, тъй като това ми напомня за спагети код. За да накарате програма да спре да чака определен ред, можете да използвате async методи в .NET.   -  person user1477388    schedule 26.02.2014
comment
Това е възможен дубликат на това: stackoverflow.com/questions/12231789/   -  person Phil_12d3    schedule 26.02.2014
comment
@Phil_12d3 Съвсем не   -  person Alejandro del Río    schedule 26.02.2014
comment
Ако не е дубликат, решението със сигурност се съдържа там.   -  person Phil_12d3    schedule 28.02.2014


Отговори (2)


AcceptTcpClient е блокиращо повикване. Ще трябва или да преместите работата си по слушане на връзка в отделна нишка, или да използвате извиквания на метод Asyc, за да приемате връзки без блокиране.

person Bradley Uffner    schedule 26.02.2014

използвайте Background Worker:

//define this outside
TcpClient ClientList;

//....
    if (Main && List && Admin)
    {
        Console.WriteLine("[SERVER]" + "Waiting to connect");
        bw.RunWorkerAsync();

        NextCode();
    }

}

private void NextCode()
{
    //CODE
}

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    ClientList = ListServer.AcceptTcpClient();
}

private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (ClientList.Connected)
    {
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine(ListMessage + "CONECTED !");
    }
}
person Alejandro del Río    schedule 26.02.2014