Dispatcher。Invoke方法可以将Delegate或Action实例作为参数。 但Dispatcher。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参数?
答案 0 :(得分:0)
这是一项设计决定。由于WPF附带了.NET 3.0,并且可能WPF是在几年内开发的,因此可能会在早期添加Action
,Action<T>
...或Func<T>
等代表。 .NET 3.0 alphas,所以他们使用自己的委托离开了代码。
另一方面,你认为你需要执行强制转换而你应该实例化Action
:
// This is possible!
Delegate d1 = new Action(() => Console.WriteLine("hello world"));
Dispatcher.BeginInvoke(new Action(() => { /* ---do stuff--- */ }));