2013-10-09 23 views
2

我的歡迎頁面中有一個按鈕,但我想等待大約3秒鐘後才允許用戶按下它。這是爲了讓用戶被迫閱讀一個快速的小信息性陳述。我正在XAML中默認禁用按鈕,然後在我加載的事件中,我想啓動計時器,並在3秒鐘過去後啓用按鈕。從這裏引用前一個問題How to Pause without Blocking the UI我有以下,但在嘗試啓用按鈕如何在啓用控件之前等待

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 
     }); 
} 

是,當我得到一個UnauthorizedAccessException有更好的方法來做到這一點?所有用戶在這個頁面上做的事情是閱讀一個簡短的聲明,那麼是否有必要阻止UI線程?在這種情況下的任何建議或意見將不勝感激。

回答

3

您需要編組上下文回UI線程:

Task.Delay(TimeSpan.FromSeconds(3.0)).ContinueWith(t => 
    { 
     welcomeButton.IsEnabled = true; 
    }, TaskScheduler.FromCurrentSynchronizationContext()); 

注意,在Windows Phone的8,你可以使用異步/的await來代替。這也應該在7.5通過Microsoft.Bcl.Async包工作:

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

這偉大的工作。我以前沒有用過await/async。你能給出一些背景信息,瞭解到底發生了什麼? – Matthew

+0

@Matthew網上有很多關於它的信息 - 但它比寫入評論的內容複雜得多。 –

2

裏德在Windows Phone 8的這個方法會說,

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

解決您的問題。

對於瞭解這種異步/等待您可以使用此 MSDN Link

相關問題