Как использовать AcceptTcpClient в асинхронном методе - PullRequest
2 голосов
/ 10 апреля 2011

Я делаю небольшую программу с использованием C ++ / CLI, которая использует TcpListener, я знаю, что AcceptTcpClient - это синхронный метод, блокирующий поток пользовательского интерфейса.Как я могу вызвать этот метод, чтобы он не блокировал мой интерфейс?Вот мой код:

TcpClient^ client = server->AcceptTcpClient();
sendConsoleResult( "Connected to Client, waiting for for instructions..." );
data = nullptr;
// Get a stream Object* for reading and writing
NetworkStream^ stream = client->GetStream();
Int32 i;
// Loop to receive all the data sent by the client.
while ( i = stream->Read( bytes, 0, bytes->Length ))
{
    // Translate data bytes to a ASCII String*.
    data = Encoding::ASCII->GetString( bytes, 0, i );
    sendConsoleResult("[RECEIVED]: "+ data);
    // Process the data then send to command processing module
    data = data->ToUpper();
    response = commandProcess(data)->ToUpper();
    array<Byte>^msg = Encoding::ASCII->GetBytes( response );
    // Send back a response.
    stream->Write( msg, 0, msg->Length );
    sendConsoleResult("[RESPONSE]: " + response);
}

Спасибо, что ответили на мой вопрос:

1 Ответ

2 голосов
/ 10 апреля 2011

Переключитесь на использование TcpListener.BeginAcceptTcpClient , а также использование NetworkStream.BeginRead . Это сделает всю вашу работу асинхронной и не заблокирует поток вашего пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...