C# Ожидание установки значения - PullRequest
0 голосов
/ 02 апреля 2020

У меня проблема. Я использую холст Skiasharp, где я рисую круг. Теперь цвет круга определяется веб-звонком, поэтому я использую этот код в начале:

public DeviceControl()
{
    NavigationPage.SetHasNavigationBar(this, false);
    InitializeComponent();

    ColorHandler();
}

public Task ColorHandler(string Type)
{
    return GetColors();
}

private async Task GetColors()
{
    colorList= await App.RestService.GetColors();
    pickerMode.ItemsSource = colorList;
    selectedColor = colorList.Where(x => x.Id == myCircle.ColorId).FirstOrDefault();
}

Затем, после этого кода, приложение нарисует Canavas в следующем пустоте:

private void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
    SKCanvas canvas = e.Surface.Canvas;
    float UnscaledWidth = e.Info.Width;
    float UnscaledHeight = e.Info.Height;

    if (selectedColor != null)
    {
        imgLedstrip.Foreground = selectedColor;
    }
    else
    {
        imgLedstrip.Foreground = Color.FromHex("#707070");
    }

    /* REST OF MY CODE, BUT IRRELEVANT */
}

Но переменная selectedColor пуста, а она заполняется позже !!!

Почему мой конструктор не ожидает CodeHandler ()?

1 Ответ

0 голосов
/ 02 апреля 2020

Проблема в том, что Xamarin не может обрабатывать асинхронные ожидающие вызовы в конструкторе, и поэтому он завершится до того, как произойдет асинхронный вызов.

Фактически вам нужно быть осторожным при вызове асинхронных / долго выполняющихся функций во всем, что связано с пользовательским интерфейсом, так как вы можете получить тупики или медленное взаимодействие с пользовательским интерфейсом, если вы пытаетесь принудительно использовать результат.

Я бы посоветовал вам изменить код так, чтобы эта функция вызывалась до того, как вам потребуется он или, по крайней мере, не позволяет ни одной функции, основанной на результатах, запускаться до тех пор, пока это не будет сделано.

...