繁体   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