以下網站顯示該功能的簽名,但沒有一個允許使用單個參數。 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提供了更多的重載時它意味着什麼。
你確定嗎?文檔指出可以傳遞null,但這不同於傳遞任何內容。我在想,WPF框架以某種方式爲.Net中定義的方法提供了一個擴展,因爲必須有一個聲明只接受一個參數。 – shawn1874
是的,這就是[params](https://msdn.microsoft.com/en-us/library/w5zay9db.aspx)的工作方式:「你也可以不發送參數,如果你沒有發送參數,參數的長度列表爲零「。 – Steven
好的。我明白你在說什麼。事實證明,我正在使用的項目並沒有使用WPF4.5。本書所說的內容仍然可能是真實的,但我必須通過建立一個visual studio 2015項目來檢查是否有更多的重載。這本書仍然意味着它並不是它所談論的超載。這似乎仍然暗示一個參數存在更具體的超載。 – shawn1874