我的欢迎页面中有一个按钮,但我想等待大约3秒才允许用户按下它。这样就迫使用户阅读快速的小信息声明。我在xaml中默认禁用该按钮,然后在我加载的事件中我想启动计时器,当3秒过去时启用按钮。从这里引用上一个问题How to Pause without Blocking the UI我有以下内容,但在尝试启用按钮时我得到UnauthorizedAccessException
WelcomePage.xaml
<Button x:Name="welcomeButton" IsEnabled="False" Content="Welcome" Click="welcomeButton_Click"/>
WelcomePage.xaml.cs
void WelcomePage_Loaded(object sender, RoutedEventArgs e)
{
Task.Delay(TimeSpan.FromSeconds(3.0)).ContinueWith(t =>
{
welcomeButton.IsEnabled = true; //UnauthorizedAccessException error
});
}
有更好的方法吗?所有用户在此页面上正在阅读快速语句,因此是否有必要阻止UI线程?在这种情况下的任何建议或建议将不胜感激。
答案 0 :(得分:3)
您需要将上下文封送回UI线程:
Task.Delay(TimeSpan.FromSeconds(3.0)).ContinueWith(t =>
{
welcomeButton.IsEnabled = true;
}, TaskScheduler.FromCurrentSynchronizationContext());
请注意,在Windows Phone 8中,您可以使用async / await。这也可以通过Microsoft.Bcl.Async
包在7.5中使用:
async void WelcomePage_Loaded(object sender, RoutedEventArgs e)
{
await Task.Delay(TimeSpan.FromSeconds(3.0));
welcomeButton.IsEnabled = true;
}
答案 1 :(得分:2)
正如Reed在Windows Phone 8中所说,这种方法将会,
async void WelcomePage_Loaded(object sender, RoutedEventArgs e)
{
await Task.Delay(TimeSpan.FromSeconds(3.0));
welcomeButton.IsEnabled = true;
}
解决您的问题。
要了解有关此async / await的更多信息,您可以使用此功能 MSDN Link