У меня есть TCP-сервер с методом запуска, похожим на:
public async Task Start()
{
using (Canceler.Token.Register(() => listener.Stop()))
{
try
{
listener.Start();
var tcpClient = await listener.AcceptTcpClientAsync();
var clientStream = tcpClient.GetStream();
while(!CloseAll)
{
while (!clientStream.DataAvailable)
{
if (CloseAll)
{
break;
}
}
Byte[] bytes = new Byte[tcpClient.Available];
clientStream.Read(bytes, 0, bytes.Length);
String data = Encoding.UTF8.GetString(bytes);
Debug(data);
}
}
catch (Exception exc)
{
Debug(exc.Message);
Canceler.Token.ThrowIfCancellationRequested();
throw;
}
}
}
А затем класс связи, который обрабатывает его, выглядит так:
internal async void Init()
{
DebugMessage("initializing gameBrain");
TCP = new TCPController();
TCP.newDebugMessage += Debug;
await TCP.Start();
}
И на самом верху, ву нас есть страница:
public MainPage(GameBrain _brain)
{
InitializeComponent();
Brain = _brain;
Brain.newMessageToUI += NewMessageFromBrain;
Brain.Init();
}
Я запустил вещь, и она работает в начале.Пользовательский интерфейс отзывчив (я добавил кнопку с displayAlert для тестирования) Я заметил, что система зависает после подключения TCP-клиента.Во внутреннем времени запуска, но ... я думал, что это ожидалось!
Я думал, что запуск будет выполняться в другом потоке, пока приложение get освободится от него.Честно говоря, я привык к фоновым специалистам, но я перехожу оттуда к Задачам, и есть определенно что-то, чего я не получаю.
Как это сделать?