简体   繁体   中英

Using Thread.Sleep in Xamarin.Forms

I want to execute the following

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;
                    })),
            },
        }
    }
};

I included System.Threading and System.Threading.Tasks , but I still get

The name 'Thread' does not exist in the current context.

This site suggests that Thread.Sleep can be used in Xamarin.Forms . I have this in a shared project, not a PCL.

If you want to wait

asynchronously: await Task.Delay(10000);

synchronously: Task.Delay(10000).Wait();

But please try to avoid blocking the UI thread to ensure a good user experience and keep your app responsive.

Using Thread.Sleep in Xamarin.Forms

There are two Xamarin.Forms templates:

  • Xamarin.Forms Portable Class Library

    Because of the PCL subset mechanism, you have no chance to get Thread.Sleep .

    Update 2017: PCLs are deprecated, now. If you use .netstandard 2.0, you can use Thread.Sleep as you are used to it.

  • Xamarin.Forms Shared Project

    This Template contains different platforms that do not support Thread.Sleep . Windows UWP, Xamarin.Android and Xamarin.iOS support it, Windows Phone 8.1, and Windows 8.1 not. If you unload/delete the 2 projects, the solution builds. (don't forget using System.Threading; in your App.cs)

You can try to use

await Task.Delay(milliseconds);

if you want to put a delay in your thread.

For blocking you can do

Task.Delay(TimeSpan.FromSeconds(5)).Wait();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM