2016-03-30 30 views
1

以下網站顯示該功能的簽名,但沒有一個允許使用單個參數。 https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.begininvoke(v=vs.110).aspx如何在WPF應用程序中編譯一個委託參數的BeginInvoke?

以下網站顯示了採用Action類型的silverlight聲明,該類型似乎與示例程序的功能相匹配。但是示例程序不是Silverlight,而是WPF應用程序。 https://msdn.microsoft.com/en-us/library/cc190259(v=vs.95).aspx

我想了解如何閱讀文檔以驗證我對示例程序的理解。我無法弄清楚這個程序連接的具體功能是什麼。下面是來自Windows Presentation Foundation 4.5 Cookbook一書的程序中的一個函數。該調用與我在Silverlight文檔中看到的DispatcherInvoke版本相似,因爲它不是Silverlight應用程序,並且.net框架似乎沒有提供該簽名。除了在silverlight文檔中的某個地方,我應該能夠找到正確描述函數簽名的地方?

private void OnCalculate(object sender, RoutedEventArgs e) { 
      try { 
       int first = int.Parse(_from.Text), last = int.Parse(_to.Text); 
       _calcButton.IsEnabled = false; 
       _cancelButton.IsEnabled = true; 
       _cts = new CancellationTokenSource(); 

       ThreadPool.QueueUserWorkItem(_ => { 
        int total = CountPrimes(first, last, _cts.Token); 
        Dispatcher.BeginInvoke(new Action(() => { 
         _result.Text = total < 0 ? "Cancelled!" : "Total Primes: " + total.ToString(); 
         _cancelButton.IsEnabled = false; 
         _calcButton.IsEnabled = true; 
        })); 
       }); 
      } 
      catch(FormatException ex) { 
       MessageBox.Show(ex.Message); 
      } 

     } 

進一步閱讀,本書確實提到WPF 4.5提供了更多的重載。儘管這有些幫助,但我仍不明白Microsoft文檔中描述的內容。後續的問題是,WPF如何提供最初在.Net中定義的東西的重載?我認爲Dispatcher類只是.net框架線程命名空間的一部分,所以我不知道當有人寫道WPF提供了更多的重載時它意味着什麼。

回答

1

重載之一是BeginInvoke(Delegate, Object[])。儘管這似乎需要兩個參數,當你看docs for that method你會看到,它實際上是定義爲

public DispatcherOperation BeginInvoke(
    Delegate method, 
    params object[] args 
) 

第二個參數使用params關鍵字,這意味着任何數量的對象參數後可能被傳遞委派參數。零對象參數是完全有效的,並且會導致方法接收一個空數組。

+0

你確定嗎?文檔指出可以傳遞null,但這不同於傳遞任何內容。我在想,WPF框架以某種方式爲.Net中定義的方法提供了一個擴展,因爲必須有一個聲明只接受一個參數。 – shawn1874

+0

是的,這就是[params](https://msdn.microsoft.com/en-us/library/w5zay9db.aspx)的工作方式:「你也可以不發送參數,如果你沒有發送參數,參數的長度列表爲零「。 – Steven

+0

好的。我明白你在說什麼。事實證明,我正在使用的項目並沒有使用WPF4.5。本書所說的內容仍然可能是真實的,但我必須通過建立一個visual studio 2015項目來檢查是否有更多的重載。這本書仍然意味着它並不是它所談論的超載。這似乎仍然暗示一個參數存在更具體的超載。 – shawn1874

相關問題