在Xamarin.Forms
使用了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
,但我仍然得到
名称“主题”不存在的当前上下文。
This site建议Thread.Sleep
可用于Xamarin.Forms
。我在一个共享的项目中,而不是PCL。
如果你想等待
异步:await Task.Delay(10000);
同步:Task.Delay(10000).Wait();
但请尽量避免阻塞UI线程确保良好的用户体验并保持您的应用程序不变sponsive。
在Xamarin.Forms
使用了Thread.Sleep有两种Xamarin.Forms模板:
-
Xamarin.Forms便携式类库
由于PCL子集机制,你没有机会得到
Thread.Sleep
。更新2017: PCL现在已被弃用。如果使用.net标准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)
你可以尝试使用
await Task.Delay(milliseconds);
,如果你想要把一个延迟你的线程。
阻止,你可以做
Task.Delay(TimeSpan.FromSeconds(5)).Wait();
你可以这样做,但这与我想尝试的例子不同。该线程应该被第一个按钮不被延迟阻塞。你知道我错过了什么吗?子项目中的参考? – testing
@testing: - 更新了我的答案以阻止它。请检查 –
'Thread.Sleep'应同时使用几乎所有的UI框架来避免(的WinForms/WPF/Xamarin.Forms/Silverlight的/ ... ),因为它会冻结UI线程并挂起UI。 –
它仅用于演示目的,但谢谢您的补充。 – testing