2013-10-09 5 views
2

내 WelcomePage에 단추가 있지만 사용자가이를 누르기 전에 약 3 초 동안 기다리고 싶습니다. 이것은 사용자가 신속하고 유익한 정보를 읽도록 강요받는 것입니다. xaml에서 기본적으로 비활성화 된 버튼을 만든 다음로드 된 이벤트에서 타이머를 시작하고 3 초가 지나면 버튼을 활성화합니다. 여기 How to Pause without Blocking the UI을 이전 질문을 참조에서 나는 다음과 같은했지만 버튼이전에 대기하는 방법

에게 WelcomePage.xaml 수 있도록

void WelcomePage_Loaded(object sender, RoutedEventArgs e) 
{ 
    Task.Delay(TimeSpan.FromSeconds(3.0)).ContinueWith(t => 
     { 
      welcomeButton.IsEnabled = true; //UnauthorizedAccessException error 
     }); 
} 

인가

<Button x:Name="welcomeButton" IsEnabled="False" Content="Welcome" Click="welcomeButton_Click"/> 

WelcomePage.xaml.cs 할 때 나는 UnauthorizedAccessException을 얻고있다 이렇게하는 더 좋은 방법이 있습니까? 이 페이지에서 수행중인 모든 사용자는 빠른 설명을 읽으므로 UI ​​스레드를 차단해야합니까? 이 상황에서 어떤 제안이나 조언이라도 대단히 감사하겠습니다.

답변

3

당신은 다시 UI 스레드의 컨텍스트를 마샬링해야합니다 윈도우 폰 8, 당신은 비동기/await를 대신 사용할 수 있습니다

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

하는 것으로. 이것은 또한 Microsoft.Bcl.Async 패키지를 통해 7.5에서 작동합니다 :

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

리드가 윈도우 폰 8이 방법 의지에 말했듯이,

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

이 문제를 해결한다. 이 비동기에 대한 자세한 학습을위한

는/당신이 MSDN Link

관련 문제