Подождите, пока функция завершит sh для загрузки в Xamarin Forms - PullRequest
1 голос
/ 08 мая 2020
• 1000 *

Как я могу убедиться, что моя функция будет загружена?

Вот моя функция в приложении. Xml .cs:

public async void SetLeafLanguage() // here is the function I would like to wait before display the MainPage
{
        var phoneLanguage = "fr";// CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;

        // transversal
        var WarningConnexionText = await MicosoftTranslater.TranslateText("this the first text", phoneLanguage);

        // Test page 
        var NumberOfWords = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);


        var ExerciceTitle = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

        var AnswerPlaceHolder = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

        var LabelNumberOfWordToTranslate = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

        // parameter labels
        var AboutUstext = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

}

public void  GetUserOnData()
{
    SetLeafLanguage();
    MainPage = new MainPage();
}

public App ()
{
    InitializeComponent();
    GetUserOnData();
}

1 Ответ

0 голосов
/ 08 мая 2020

Вам необходимо сделать возвращаемый тип метода Task вместо void.

Всегда следует избегать методов async void. См. Microsoft Async / Await - Best Practices

Измените свой код следующим образом:

public async Task SetLeafLanguage() // here is the function I would like to wait before display the MainPage
{
        var phoneLanguage = "fr";// CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;

        // transversal
        var WarningConnexionText = await MicosoftTranslater.TranslateText("this the first text", phoneLanguage);

        // Test page 
        var NumberOfWords = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);


        var ExerciceTitle = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

        var AnswerPlaceHolder = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

        var LabelNumberOfWordToTranslate = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

        // parameter labels
        var AboutUstext = await MicosoftTranslater.TranslateText("this the second text", phoneLanguage);

}

public async Task GetUserOnData()
{
    await SetLeafLanguage();
    MainPage = new MainPage();
}

public App ()
{
    InitializeComponent();
    GetUserOnData();
}

Разница в том, что теперь оба метода SetLeafLanguage и GetUserOnData относятся к типу async Task. Это означает, что вы можете просто await метод SetLeafLanguage. Когда вы await это делаете, это означает, что вы будете ждать, пока метод что-то вернет, и тогда вы можете быть уверены, что обработка завершена.

Подробнее о типах возврата asyn c можно прочитать здесь - Асинхронный c Типы возврата (C#)

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