C# Socket Xamarin Отправка и получение данных от сервера

Рейтинг: 0Ответов: 1Опубликовано: 28.07.2023

осуществляю подключение к серверу и отправку данных на него, получается приходил ответ от сервера но не открывается другое окно приложения, проверял точками остановки выполнения, код доходит до Navigation но не выполняется.

Но при этом если нажать отправку данных на сервер снова, после получения открывается это заветное окно (Но со второго раза). Вызываю так: await Task.Run(() => EndReceiveAsync());

КОД

public async Task EndReceiveAsync()
    {
        while (true)
        {
            Thread.Sleep(10);
            try
            {
                int bytecount = sock.Receive(buffer);
                MemoryStream stream = new MemoryStream(buffer);
                BinaryReader reader = new BinaryReader(stream);
                if (bytecount > 0)
                {
                    string code = reader.ReadString();
                    switch (code)
                    {
                        case "login":
                            {
                                if(reader.ReadString() == "noex")
                                {
                                    await DisplayAlert("Ошибка",reader.ReadString(),"Понятно..");
                                    return;
                                }
                                else
                                {
                                    await Navigation.PushAsync(new PanelPage());
                                    return;
                                }
                            }
                    }
                }
            }
            catch
            {

            }
        }
    }

Ответы

▲ 1Принят

Вот эту часть поправить и для push, и для DisplayAlert:

if (reader.ReadString() == "noex")
{
    await Device.InvokeOnMainThreadAsync(async () =>
    {
        await DisplayAlert("Ошибка", reader.ReadString(), "Понятно..");
    });
    return;
}
else
{
    await Device.InvokeOnMainThreadAsync(async () =>
    {
        await Navigation.PushAsync(new PanelPage());
    });
    return;
}

Device.InvokeOnMainThreadAsync выводит в основной поток, по идее, должно решить проблемы с открытием нового окна.