web-dev-qa-db-fra.com

Utilisation de Thread.Sleep dans Xamarin.Forms

Je veux exécuter ce qui suit

MainPage = new ContentPage
{
    Content = new StackLayout
    {
        Children =
        {
            new Button
            {
                Text = "Thread.Sleep",
                Command = new Command(() =>
                {
                    Thread.Sleep(1000);
                    MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x));
                }),
            },
            new Button
            {
                Text = "Task.Run + Thread.Sleep",
                Command = new Command(async () =>
                {
                    await Task.Run(() => Thread.Sleep(1000));
                    MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x));
                })
            },
            new Button
            {
                Text = "Device.StartTimer",
                Command = new Command(() => Device.StartTimer(
                    TimeSpan.FromSeconds(1),
                    () =>
                    {
                        MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x));
                        return false;
                    })),
            },
        }
    }
};

J'ai inclus System.Threading et System.Threading.Tasks, mais je reçois toujours

Le nom "Thread" n'existe pas dans le contexte actuel.

Ce site suggère que Thread.Sleep peut être utilisé dans Xamarin.Forms. J'ai ceci dans un projet partagé, pas un PCL.

13
testing

Si vous voulez attendre

de manière asynchrone: await Task.Delay(10000);

de façon synchrone: Task.Delay(10000).Wait();

Mais essayez d'éviter de bloquer le thread d'interface utilisateur pour assurer une bonne expérience utilisateur et garder votre application réactive.

tilisation de Thread.Sleep dans Xamarin.Forms

Il existe deux modèles Xamarin.Forms:

  • Bibliothèque de classes portable Xamarin.Forms

    En raison du mécanisme de sous-ensemble PCL, vous n'avez aucune chance d'obtenir Thread.Sleep.

    Mise à jour 2017: Les PCL sont désormais obsolètes. Si vous utilisez .netstandard 2.0, vous pouvez utiliser Thread.Sleep comme vous en avez l'habitude.

  • Projet partagé Xamarin.Forms

    Ce modèle contient différentes plates-formes qui ne prennent pas en charge Thread.Sleep. Windows UWP, Xamarin.Android et Xamarin.iOS le prennent en charge, Windows Phone 8.1 et Windows 8.1 non. Si vous déchargez/supprimez les 2 projets, la solution se construit. (n'oubliez pas d'utiliser System.Threading; dans votre App.cs)

30

Vous pouvez essayer d'utiliser

await Task.Delay(milliseconds);

si vous voulez mettre un délai dans votre fil.

Pour le blocage, vous pouvez le faire

Task.Delay(TimeSpan.FromSeconds(5)).Wait();
3
Rahul Tripathi