2012-01-25 64 views
0

我有這段代碼。它可以工作,但會凍結用戶界面。 我想知道的是如何正確使用WPF BeginInvok方法?如何正確使用BeginInvoke方法?

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

從您發佈的示例中,您正確地使用了它。但是,在Lambda函數中調用哪些代碼?你有可能重新進入和/或發生死鎖 - 你使用其他線程嗎?什麼是凍結時的CPU使用率。最大還是零? –

+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! –