[英]Why doesn't Dispatcher.BeginInvoke take an Action as a parameter?
調度員。 調用方法可以將Delegate或Action實例作為參數。 但是調度員。 BeginInvoke方法不接受Action實例; 它僅支持Delegate 。
在BeginInvoke的情況下,它迫使我將lambda表達式強制轉換為Action。 例如:
Dispatcher.Invoke(() => Title = "foo"); // success
// Dispatcher.BeginInvoke(() => Title = "foo"); // error
Dispatcher.BeginInvoke((Action)(() => Title = "foo")); // success
有什么原因導致Dispatcher.BeginInvoke方法無法采用Action參數?
這是設計決定。 由於WPF隨.NET 3.0一起提供,並且WPF可能是在幾年內開發的,因此早期的.NET 3.0 Alpha中未添加諸如Action
, Action<T>
...或Func<T>
...之類的代表,因此他們離開了使用自己的委托編寫代碼。
另一方面,您認為您需要執行強制轉換,而應實例化Action
:
// This is possible!
Delegate d1 = new Action(() => Console.WriteLine("hello world"));
Dispatcher.BeginInvoke(new Action(() => { /* ---do stuff--- */ }));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.