2

我的 WelcomePage 中有一个按钮,但我想等待大约 3 秒钟,然后才允许用户按下它。这是为了让用户被迫阅读一个简短的信息性声明。我在 xaml 中默认禁用该按钮,然后在我加载的事件中我想启动计时器,并在 3 秒后启用该按钮。通过在此处引用上一个问题如何在不阻塞 UI 的情况下暂停UnauthorizedAccessException我有以下内容,但是在尝试启用按钮时我得到了

欢迎页面.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 线程吗?在这种情况下的任何建议或建议将不胜感激。

4

2 回答 2

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;
}
于 2013-10-09T00:30:38.233 回答
2

正如 Reed 在 Windows Phone 8 中所说,这种方法将,

async void WelcomePage_Loaded(object sender, RoutedEventArgs e)
{
     await Task.Delay(TimeSpan.FromSeconds(3.0));
     welcomeButton.IsEnabled = true;
}

解决你的问题。

要了解有关此异步/等待的更多信息,您可以使用此 MSDN 链接

于 2013-10-09T06:02:03.593 回答