2012-01-25 3 views
0

이 코드가 있습니다. 작동하지만 UI가 정지됩니다. WPF BeginInvok 메서드를 corectly로 사용하는 방법을 알고 싶습니다.BeginInvoke 메서드를 올바르게 사용하는 방법은 무엇입니까?

private void ValidateAuthURL_Click(object sender, RoutedEventArgs e) 
{ 
    ((Button)sender).Dispatcher.BeginInvoke(DispatcherPriority.Input, 
     new ThreadStart(() => 
     { 
      bool result = false; 
      try 
      { 
+0

게시 한 예에서 사용하고 있습니다. 그러나 어떤 코드가 람다 함수 내에서 호출됩니까? 재진입 및/또는 교착 상태가 발생할 가능성이 있습니다 - 다른 스레드를 사용하고 있습니까? 고정 된 경우와 같은 CPU 사용률은 무엇입니까? 최대 또는 0? –

+0

@Dr. Andrew Burnett-Thompson 저는 var request = WebRequest.Create (serviceUrl)를 HttpWebRequest로 사용합니다. 등등 ... –

답변

3

귀하의 대표는 UI 스레드에 을 실행하는 것입니다. 그게 Dispatcher.BeginInvoke입니다. 난 당신이 정말 그 배경 스레드에서 그 대리인을 실행하고 싶습니다 ... Dispatcher.BeginInvoke다시 나중에 UI를 업데이 트하기 위해 UI 스레드에 얻을 사용해야합니다. 백그라운드 스레드에지고의 측면에서

, 당신은 할 수 :

  • 는 스레드 풀 직접 (ThreadPool.QueueUserWorkItem)
  • 사용 BackgroundWorker
  • 시작 새 스레드를 사용
  • 사용 Task.Factory.StartNew (당신이 경우 .NET을 사용하고 있습니다. 4)
+0

고맙습니다 .JonSkeet! –

관련 문제