簡體   English   中英

為什么Dispatcher.BeginInvoke不將Action作為參數?

[英]Why doesn't Dispatcher.BeginInvoke take an Action as a parameter?

調度員。 調用方法可以將DelegateAction實例作為參數。 但是調度員。 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中未添加諸如ActionAction<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM