我想执行以下
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
,但我仍然
名称'线程'在当前背景下不存在。
This site表示可以在Thread.Sleep
中使用Xamarin.Forms
。我在共享项目中有这个,而不是PCL。
答案 0 :(得分:30)
如果您要等待
异步:await Task.Delay(10000);
同步:Task.Delay(10000).Wait();
但请尽量避免阻止UI线程以确保良好的用户体验并保持应用响应。
在Xamarin.Forms中使用Thread.Sleep
有两个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中)
答案 1 :(得分:3)
您可以尝试使用
await Task.Delay(milliseconds);
如果你想在你的帖子中加一个延迟。
对于阻止你可以做
Task.Delay(TimeSpan.FromSeconds(5)).Wait();