[英]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.