Reputation: 20289
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.
Upvotes: 16
Views: 33400
Reputation: 14760
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)
Upvotes: 41
Reputation: 172628
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();
Upvotes: 4