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, так как это напоминает мне спагетти-код. Чтобы программа перестала ждать определенной строки, вы можете использовать асинхронные методы в .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

используйте фонового рабочего:

//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