Why the UI thread hangs in me when I do While
, well, it was understandable if I had done this cycle in the usual method, so I made the method asynchronous and still hang, why?
private async void button_Click(object sender, RoutedEventArgs e) { while (true) // С этим while'ом работает всё ок { Task processTask = Process(lastclient); } } async Task Process(TcpClient result) { ... тут что-то происходит while (true) // С этим while'ом всё повисает { result.Client.Receive(recievebytes); } }
UPD 1 :
SocketAsyncEventArgs eventArgObjectForPool = new SocketAsyncEventArgs(); eventArgObjectForPool.UserToken = users.Last<TcpClient>().Client; result.Client.ReceiveFromAsync(eventArgObjectForPool); //Вот тут вылетает, какого то параметра не хватает внутри eventArgObjectForPool
UPD 2 :
TcpListener listener; TcpClient user; private async void button_Click(object sender, RoutedEventArgs e) //По нажатии на клавишу запускаем наш серв { TcpListener listener = new TcpListener(listenPort); listener.Start(); TcpClient user = await listener.AcceptTcpClientAsync() while (true) { Process(user); //Если клиент подключён, то начинаем с ним работать } } async Task Process(TcpClient result) { //Тут настраиваем слушалку для клиента SocketAsyncEventArgs eventArgObjectForPool = new SocketAsyncEventArgs(); eventArgObjectForPool.UserToken = user.Client; eventArgObjectForPool.RemoteEndPoint = user.Client.RemoteEndPoint; eventArgObjectForPool.Completed += EventArgObjectForPool_Completed; listener.Server.ReceiveFromAsync(eventArgObjectForPool); // Вот это я как понимаю ставлю обработчик на входящие сообщения } private void EventArgObjectForPool_Completed(object sender, SocketAsyncEventArgs e) { Console.WriteLine("ads"); // Если что-то приходит от клиента, то выводим в консоль строку какую-нибудь. }
TcpClient user = await listener.AcceptTcpClientAsync()
should have been inserted insidewhile
? - VladDasync Task Process
somehow too synchronous. Where is await? - Qwertiy ♦