Использование Thread.Sleep в Xamarin.Forms
Я хочу выполнить следующие
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;
})),
},
}
}
};
Я включил System.Threading
и System.Threading.Tasks
, но я все еще получаю
Имя "Thread" не существует в текущем контексте.
Этот сайт предполагает, что Thread.Sleep
можно использовать в Xamarin.Forms
. У меня это в общем проекте, а не в PCL.
Ответы
Ответ 1
Если вы хотите подождать
асинхронно: await Task.Delay(10000);
синхронно: Task.Delay(10000).Wait();
Но, пожалуйста, постарайтесь не блокировать поток пользовательского интерфейса, чтобы обеспечить хороший пользовательский интерфейс и откликаться на ваше приложение.
Использование Thread.Sleep в Xamarin.Forms
Есть два шаблона Xamarin.Forms:
-
Библиотека портативных классов Xamarin.Forms
Из-за механизма подмножества PCL у вас нет шансов получить Thread.Sleep
.
Обновление 2017: Теперь PCL устарели. Если вы используете .netstandard 2.0, вы можете использовать Thread.Sleep
, как вы привыкли к нему.
-
Общий проект Xamarin.Forms
Этот шаблон содержит разные платформы, которые не поддерживают Thread.Sleep
. Windows UWP, Xamarin.Android и Xamarin.iOS поддерживают его, Windows Phone 8.1 и Windows 8.1 нет. Если вы выгрузите/удалите 2 проекта, решение будет построено. (не забудьте использовать System.Threading, в вашем App.cs)
Ответ 2
Вы можете попробовать использовать
await Task.Delay(milliseconds);
если вы хотите поместить задержку в свой поток.
Для блокировки вы можете сделать
Task.Delay(TimeSpan.FromSeconds(5)).Wait();